Menu
CoddyTech

最小二乗法による近似

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です。これより誤差の小さい線はありません。

時間に対する積雪量を5つの点で示し、3本の線を描いた図。二乗残差の和が159と18の破線の推定線2本と、二乗残差の和が6.5の太いpolyfitの線

1は直線を求め、xが先にきます。これは線形回帰で、セクション3で最初に学習するモデルです。

challenge icon

チャレンジ

中級

あるドローンメーカーは、どの測定値が飛行時間を最もよく予測するかを知りたいと考えています。drones.csvには15回の飛行データが含まれており、payload_g、wind_kmh、flight_minがあります。スターターコードはデータを読み込み、ssr(x, y, slope, intercept)を定義しています。

  1. columns内の各列について、その列からflight_minを予測する直線を当てはめます。
  2. 以下のように、その式とSSRを出力します。傾きは小数点以下3桁、切片とSSRは小数点以下2桁にします。
  3. 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"]

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

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

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

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