Pythonで学ぶAIの概念

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コンパイラで実行できます。

練習問題

入力値と境界ケースを変更し、より大きなデータでも動作を確認してください。

  1. 入力や重みを変えて、実行前に出力を予想してみましょう。
  2. 途中の値を出力して、計算の各ステップを追いましょう。
  3. 下のリンクのチャレンジを解いて、自分でアイデアを実装しましょう。
Python IDEで実行 →

チャレンジで練習する

このレッスンの内容を使って実際の問題を解きましょう。各チャレンジはブラウザで動き、すぐにテストされ、AI のレビューも受けられます。

すべてのチャレンジ