Menu
CoddyTech

残差

CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 35/64。

この章では、データに近似直線を引き、それを使って予測し、その精度を評価します。ここから学ぶ内容は次のとおりです。

芝刈りの作業を5件、芝生の面積に対する所要時間を点で示し、その点を通るオレンジ色の近似直線と、面積10の新しい芝生の所要時間50分を予測する直線上の大きな緑色の星

直線の当てはまりの良さはどうでしょう?ある芝生管理サービスは、1件あたりの作業時間を4.5 * area + 5分と見積もっています。赤い隙間はそれぞれ残差で、実際の値から予測値を引いたものです。

5件の芝生作業と推定した直線。各点から直線までの赤い垂直な隙間には、+6、-5、+3.5、-7、+3.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 が相殺されるのを防ぎます。この残差平方和が小さいほど、直線の当てはまりがよくなります。モデルはこれを小さくすることで学習します。

challenge icon

チャレンジ

中級

引っ越し業者は、箱の数から引っ越しにかかる時間を推測します。boxesとhoursには過去8回の引っ越しのデータが格納されており、プログラムは推測した2本の直線を読み込みます。順に、slope1、intercept1、slope2、intercept2です。

  1. 各直線を、残差平方和で評価します。
  2. 以下のように、両方の合計を小数点以下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())

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

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

機械学習のための統計のすべてのレッスン

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