残差
CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 35/64。
この章では、データに近似直線を引き、それを使って予測し、その精度を評価します。ここから学ぶ内容は次のとおりです。
直線の当てはまりの良さはどうでしょう?ある芝生管理サービスは、1件あたりの作業時間を4.5 * area + 5分と見積もっています。赤い隙間はそれぞれ残差で、実際の値から予測値を引いたものです。
2乗して合計し、直線を評価します:
area = np.array([4, 6, 9, 12, 15])
minutes = np.array([29, 27, 49, 52, 76])
residuals = minutes - (4.5 * area + 5)
print(residuals)
print((residuals ** 2).sum())次のように出力されます:
[ 6. -5. 3.5 -7. 3.5]
134.5二乗することで、+6 と -6 が相殺されるのを防ぎます。この残差平方和が小さいほど、直線の当てはまりがよくなります。モデルはこれを小さくすることで学習します。
チャレンジ
中級引っ越し業者は、箱の数から引っ越しにかかる時間を推測します。boxesとhoursには過去8回の引っ越しのデータが格納されており、プログラムは推測した2本の直線を読み込みます。順に、slope1、intercept1、slope2、intercept2です。
- 各直線を、残差平方和で評価します。
- 以下のように、両方の合計を小数点以下2桁に丸めて出力し、より良い直線も出力します。
直線が0.16 * boxes + 0.8と0.12 * boxes + 2.5の場合:
Line 1 SSR: 0.57
Line 2 SSR: 4.1
Better: line 1自分で試してみよう
import numpy as np
boxes = np.array([10, 18, 25, 32, 40, 47, 55, 60])
hours = np.array([2.5, 3.5, 5.0, 5.5, 7.0, 8.0, 9.5, 10.0])
slope1 = float(input())
intercept1 = float(input())
slope2 = float(input())
intercept2 = float(input())
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
機械学習のための統計のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ