誤差を測る
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 13/58。
モデルの予測は、ドル単位でどれくらい外れているのでしょうか?ここに、まだ見たことのない5軒のテスト用住宅に対する住宅価格モデルがあります。
sklearn.metricsが誤差を測定してくれます。
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
y_test = np.array([290, 410, 235, 520, 330]) # 千ドル
pred = np.array([270, 450, 245, 430, 360])
print(mean_absolute_error(y_test, pred))
print(np.round(np.sqrt(mean_squared_error(y_test, pred)), 1))
print(np.round(r2_score(y_test, pred), 3))これは次のように出力されます:
38.0
47.1
0.776MAE(平均絶対誤差)は、典型的な予測誤差で、3万8千です。RMSEは誤差を二乗し、平均してから平方根を取ります。大きな誤差が1つあるため、47になります。
どちらも目的変数の単位で表されます。r2_scoreはR二乗値で、価格のばらつきの78%が説明されていることを示します。
チャレンジ
中級ある店では、中古カメラの価格をモデルで予測します。2つ目の特徴量を加えると役立つでしょうか?プログラムは、shutter_k(撮影枚数、千枚単位)またはmegapixelsを読み込みます。ひな形では、age_yearsだけを使うモデルと、追加の特徴量も使うモデルの2つを学習させ、テストデータの予測値をpredsに保存します。
- 各モデルについて、MAE、RMSE(小数点以下1桁)、R squared(小数点以下3桁)を出力します。
- MAEが小さい方を出力します。
別の店でshutter_kを使った場合:
age_years: MAE 212.4, RMSE 268.1, R squared 0.853
age_years + shutter_k: MAE 98.7, RMSE 121.0, R squared 0.97
Better: age_years + shutter_k, off by 98.7 dollars on a typical camera自分で試してみよう
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
# 販売されたカメラ1台につき1行:使用年数、シャッター回数(千回単位)、画素数(メガピクセル)、価格(ドル)
cameras = pd.read_csv("cameras.csv")
extra = input()
names = ["age_years", "age_years + " + extra]
columns = [["age_years"], ["age_years", extra]]
# 行全体を分割する。以下の各モデルはそれぞれ使用する列を選ぶ
X_train, X_test, y_train, y_test = train_test_split(cameras, cameras["price"], test_size=0.25, random_state=0)
# 列のリストごとに1つのモデルを作成し、テスト用カメラの予測値を求める
preds = []
for cols in columns:
model = LinearRegression()
model.fit(X_train[cols], y_train)
preds.append(model.predict(X_test[cols]))
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ