Menu
CoddyTech

誤差を測る

CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 13/58。

モデルの予測は、ドル単位でどれくらい外れているのでしょうか?ここに、まだ見たことのない5軒のテスト用住宅に対する住宅価格モデルがあります。

テスト用住宅1軒につき1本、価格モデルの誤差の大きさを示す5本の棒:20、40、10、90、30千ドル。破線は38のMAEを、点線は47.1のRMSEを示し、90という大きな誤差が1つあるため、RMSEのほうが上にある

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.776

MAE(平均絶対誤差)は、典型的な予測誤差で、3万8千です。RMSEは誤差を二乗し、平均してから平方根を取ります。大きな誤差が1つあるため、47になります。

どちらも目的変数の単位で表されます。r2_scoreはR二乗値で、価格のばらつきの78%が説明されていることを示します。

challenge icon

チャレンジ

中級

ある店では、中古カメラの価格をモデルで予測します。2つ目の特徴量を加えると役立つでしょうか?プログラムは、shutter_k(撮影枚数、千枚単位)またはmegapixelsを読み込みます。ひな形では、age_yearsだけを使うモデルと、追加の特徴量も使うモデルの2つを学習させ、テストデータの予測値をpredsに保存します。

  1. 各モデルについて、MAE、RMSE(小数点以下1桁)、R squared(小数点以下3桁)を出力します。
  2. 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]))

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師あり学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ