「機械学習って結局、ライブラリに任せてるだけで中身が全然わかってない…」
そんなモヤモヤを感じたことはありませんか? 今回は海外で話題になっている「NumPyだけで線形回帰をゼロから実装する」というアプローチを取り上げながら、Linear Regression From Scratch in Python の本質をわかりやすく解説していきます 🚀
scikit-learnで1行で書けるけど…それって理解してる?
scikit-learn を使えば、線形回帰はこんな感じで一瞬ですよね。
from sklearn.linear_model import LinearRegression
model = LinearRegression().fit(X, y)
でも「この fit() の中で何が起きてるの?」と聞かれたら、すぐ答えられますか? そこが今回のポイントです。
線形回帰って何をしてるの?
イメージとしては、散らばったデータ点をなるべくうまくカバーする直線を引く作業です。
数式で書くとこうなります。
y = a * x + b
この a(傾き)と b(切片)をどうやって求めるか、それが線形回帰の本体です。
NumPyだけで約15行!スクラッチ実装コード
ポイントをまとめるとこんな感じです 👇
- 最小二乗法を使って傾きと切片を計算する
- NumPyの
mean()と基本演算だけで実現できる - 難しい数式も「平均との差」を使った直感的な計算に落とし込める
import numpy as np
# サンプルデータ
x = np.array([1, 2, 3, 4, 5], dtype=float)
y = np.array([2.1, 4.0, 5.9, 8.1, 9.8], dtype=float)
# 平均を計算
x_mean = np.mean(x)
y_mean = np.mean(y)
# 傾き(slope)を計算
numerator = np.sum((x - x_mean) * (y - y_mean)) # 共分散の分子
denominator = np.sum((x - x_mean) ** 2) # 分散の分母
slope = numerator / denominator
# 切片(intercept)を計算
intercept = y_mean - slope * x_mean
# 予測してみる
y_pred = slope * x + intercept
# 結果を表示
print(f





