残差プロット
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 14/58。
良いスコアでも、形状の誤りが隠れていることがあります。上昇する生地に対して、この直線のR squaredは0.82ですが、誤差は弧を描いています:
右側のグラフは残差プロットです。各残差(実測値から予測値を引いた値)を、予測値に対して、0の線とともに示しています。
residuals = y_test - pred
fig, ax = plt.subplots()
ax.scatter(pred, residuals)
ax.axhline(0, color="gray", linestyle="--")
plt.show()健全な残差は、0の周りにノイズのように散らばります。パターンがある場合、モデルが何かを見落としていることを意味します。ここでは、上昇が遅くなることです。
複数の特徴量がある場合は、それぞれの特徴量に対しても残差をプロットしましょう。曲線状になるものがあれば、その曲線は見えにくくなります。
チャレンジ
中級ある自動車学校が80件の制動テストに直線を当てはめました:speed_kmh と braking_m です。スターターコードではテストの予測値を pred に保存し、グラフにラベルを付けています。
- 残差を計算します。
- 残差を予測値に対して散布図にし、0の位置に灰色の破線を引いてから、グラフを表示します。
この直線は曲線を見逃しているでしょうか? 左側では、制動距離が負になる予測さえしています。
別のデータから作成した、適切な直線のプロットは次のようになります:
Coddyがあなたのグラフを説明します。
自分で試してみよう
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
brakes = pd.read_csv("braking.csv")
X_train, X_test, y_train, y_test = train_test_split(brakes[["speed_kmh"]], brakes["braking_m"], test_size=0.25, random_state=0)
model = LinearRegression()
model.fit(X_train, y_train)
pred = model.predict(X_test)
fig, ax = plt.subplots()
ax.set_title("Braking Line Check")
ax.set_xlabel("Predicted braking distance (m)")
ax.set_ylabel("Residual (m)")
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ