最小二乗法による近似
CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 36/64。
直線を推測し続けると、いつまでも終わりません。np.polyfit(x, y, 1)を使えば、残差の二乗和が最小となる最適な直線が一度に求められます。こちらは、嵐の際の積雪深です:
hours = np.array([1, 2, 3, 5, 6])
depth = np.array([14, 22, 35, 52, 61])
slope, intercept = np.polyfit(hours, depth, 1)
print(np.round(slope, 2), np.round(intercept, 2))これは9.5 4.5と出力します。1時間あたり雪が約9.5 cm増え、0時間時点では4.5 cmです。これより誤差の小さい線はありません。
1は直線を求め、xが先にきます。これは線形回帰で、セクション3で最初に学習するモデルです。
チャレンジ
中級あるドローンメーカーは、どの測定値が飛行時間を最もよく予測するかを知りたいと考えています。drones.csvには15回の飛行データが含まれており、payload_g、wind_kmh、flight_minがあります。スターターコードはデータを読み込み、ssr(x, y, slope, intercept)を定義しています。
columns内の各列について、その列からflight_minを予測する直線を当てはめます。- 以下のように、その式とSSRを出力します。傾きは小数点以下3桁、切片とSSRは小数点以下2桁にします。
- SSRが小さい方の列を出力します。
別のドローンの場合:
payload_g: flight_min = -0.001 * payload_g + 21.55, SSR 164.94
wind_kmh: flight_min = -0.481 * wind_kmh + 28.13, SSR 9.1
Better predictor: wind_kmh自分で試してみよう
import numpy as np
import pandas as pd
# 直線 slope * x + intercept の残差平方和を返す(レッスン 35)
def ssr(x, y, slope, intercept):
return ((y - (slope * x + intercept)) ** 2).sum()
drones = pd.read_csv("drones.csv")
columns = ["payload_g", "wind_kmh"]
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
機械学習のための統計のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ