Pythonで学ぶ線形回帰とロジスティック回帰
回帰は最もシンプルな機械学習です。線形回帰は直線で数値を予測し、ロジスティック回帰はその直線をsigmoidに通して「はい/いいえ」の確率を予測します。
やさしい言葉で概念を理解する
回帰は最もシンプルな機械学習です。線形回帰は直線で数値を予測し、ロジスティック回帰はその直線をsigmoidに通して「はい/いいえ」の確率を予測します。
最小二乗法で直線を当てはめ、ロジスティック回帰でスコアを確率に変換します。
重要なポイント
- 線形回帰は価格や気温のような連続値を予測します。
- ロジスティック回帰は2クラスの確率を予測します。
- どちらも公式の代わりに勾配降下法で学習できます。
- パーセプトロンは似た分類器で、間違えたときだけ重みを更新します。
どのような場面で使う?
- ニューラルネットワークやAIライブラリの内部で何が起きているかを理解する。
- 対応するチャレンジで実装する前に考え方をつかむ。
- 機械学習の講座、面接、プロジェクトに備える。
動かして理解する
左のグラフをクリックすると点が増え、最もよく当てはまる直線が更新されます。右ではwとbを変えて決定境界を動かせます。
サンプルコード
main.py
import math
# Linear regression: find the line that best fits the points (least squares).
xs = [1, 2, 3, 4, 5]
ys = [2.1, 3.9, 6.2, 8.1, 9.8]
mean_x, mean_y = sum(xs) / len(xs), sum(ys) / len(ys)
slope = sum((x - mean_x) * (y - mean_y) for x, y in zip(xs, ys)) / sum((x - mean_x) ** 2 for x in xs)
intercept = mean_y - slope * mean_x
print(f"line: y = {slope:.2f}x + {intercept:.2f}")
print("predict x=6:", round(slope * 6 + intercept, 2))
# Logistic regression turns a score into a probability with the sigmoid.
def predict_pass(hours_studied, weight=1.5, bias=-4.0):
return 1 / (1 + math.exp(-(weight * hours_studied + bias)))
for hours in (1, 3, 5):
p = predict_pass(hours)
print(f"{hours} hours -> pass probability {p:.2f} -> {'pass' if p >= 0.5 else 'fail'}")
期待される出力
line: y = 1.96x + 0.14
predict x=6: 11.9
1 hours -> pass probability 0.08 -> fail
3 hours -> pass probability 0.62 -> pass
5 hours -> pass probability 0.97 -> pass
仕組み
最小二乗法の公式は、点までの距離の二乗が最小になる傾きと切片を求め、y = 1.96x + 0.14が得られます。predict_pass()は勉強時間からスコアを計算し、sigmoidがそれを確率に変えます。0.5が不合格と合格の境目です。
値を変更し、PythonをインストールせずにCodeUtilityオンラインPythonコンパイラで実行できます。
練習問題
入力値と境界ケースを変更し、より大きなデータでも動作を確認してください。
- 入力や重みを変えて、実行前に出力を予想してみましょう。
- 途中の値を出力して、計算の各ステップを追いましょう。
- 下のリンクのチャレンジを解いて、自分でアイデアを実装しましょう。
チャレンジで練習する
このレッスンの内容を使って実際の問題を解きましょう。各チャレンジはブラウザで動き、すぐにテストされ、AI のレビューも受けられます。
- 単回帰分析(最小二乗法) 最小二乗法の公式で、データ点に最もよく当てはまる直線を求めます。 中級
- 勾配降下法による線形回帰 平均二乗誤差を繰り返し下っていき、直線の傾きと切片を学習します。 中級
- ロジスティック回帰による予測 重み付き和を sigmoid に通してしきい値と比べ、サンプルを 0 か 1 に分類します。 簡単
- パーセプトロンの学習アルゴリズム 間違えたときだけ重みを更新する、元祖パーセプトロンを学習させます。 中級