Menu
CoddyTech

残差プロット

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

良いスコアでも、形状の誤りが隠れていることがあります。上昇する生地に対して、この直線のR squaredは0.82ですが、誤差は弧を描いています:

左:時間に対する生地の高さ。急速に上昇した後、上昇が緩やかになり、直線で当てはめた場合、R squaredは0.82。右:予測値に対する残差は、破線のゼロ線を囲む弧を描き、-1.3から+0.7まで上昇してから-0.7まで下降する

右側のグラフは残差プロットです。各残差(実測値から予測値を引いた値)を、予測値に対して、0の線とともに示しています。

residuals = y_test - pred
fig, ax = plt.subplots()
ax.scatter(pred, residuals)
ax.axhline(0, color="gray", linestyle="--")
plt.show()

健全な残差は、0の周りにノイズのように散らばります。パターンがある場合、モデルが何かを見落としていることを意味します。ここでは、上昇が遅くなることです。

複数の特徴量がある場合は、それぞれの特徴量に対しても残差をプロットしましょう。曲線状になるものがあれば、その曲線は見えにくくなります。

challenge icon

チャレンジ

中級

ある自動車学校が80件の制動テストに直線を当てはめました:speed_kmh と braking_m です。スターターコードではテストの予測値を pred に保存し、グラフにラベルを付けています。

  1. 残差を計算します。
  2. 残差を予測値に対して散布図にし、0の位置に灰色の破線を引いてから、グラフを表示します。

この直線は曲線を見逃しているでしょうか? 左側では、制動距離が負になる予測さえしています。

別のデータから作成した、適切な直線のプロットは次のようになります:

「適切な直線」というタイトルの残差プロット。0の位置にある破線の上下に、パターンなく散らばった20個の点

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)")

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

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

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

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