プログラミング入門

NumPyだけで線形回帰をスクラッチ実装!scikit-learnに頼らずゼロから理解する

「機械学習って結局、ライブラリに任せてるだけで中身が全然わかってない…」

そんなモヤモヤを感じたことはありませんか? 今回は海外で話題になっている「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

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る

実践Claude Code入門―現場で活用するためのAIコーディングの思考法

もしも

実践Claude Code入門―現場で活用するためのAIコーディングの思考法

AIコーディングの現場活用法を学ぶ一冊

Amazonで見る

Python Web開発実践入門 ―― FastAPIによるWebAPI開発と非同期処理

もしも

Python Web開発実践入門 ―― FastAPIによるWebAPI開発と非同期処理

FastAPIでWebAPI開発を実践的に学ぶ

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です