Pythonで学ぶAIの概念

Pythonで学ぶ分類の基礎:Softmaxとk近傍法

分類とは、猫か犬かのようにラベルを選ぶことです。モデルがクラスごとにスコアを出してSoftmaxで確率に変える方法もあれば、k近傍法のように最も近い既知の例に投票させる簡単な方法もあります。

やさしい言葉で概念を理解する

分類とは、猫か犬かのようにラベルを選ぶことです。モデルがクラスごとにスコアを出してSoftmaxで確率に変える方法もあれば、k近傍法のように最も近い既知の例に投票させる簡単な方法もあります。

Softmaxでスコアをクラスの確率に変え、交差エントロピーで評価し、k近傍法で点を分類します。

重要なポイント

  • Softmaxはスコアの順序を保ったまま、合計が1になるようにします。
  • カテゴリカル交差エントロピーは、自信満々の誤答を最も強く罰します。
  • k近傍法には学習ステップがなく、新しい点を保存済みの例と比べるだけです。
  • ナイーブベイズや決定木(ジニ不純度、情報利得)も代表的な分類器です。

どのような場面で使う?

  • ニューラルネットワークやAIライブラリの内部で何が起きているかを理解する。
  • 対応するチャレンジで実装する前に考え方をつかむ。
  • 機械学習の講座、面接、プロジェクトに備える。

動かして理解する

左のグラフのどこかをクリックすると、k個の最も近い点の投票で新しい点が分類されます。右のスコアを変えるとSoftmaxが反応します。

サンプルコード

コードを実行 →
main.py
import math
from collections import Counter

# Softmax turns raw scores into probabilities that add up to 1.
def softmax(scores):
    exps = [math.exp(s - max(scores)) for s in scores]
    total = sum(exps)
    return [e / total for e in exps]

probs = softmax([2.0, 1.0, 0.1])
print("softmax:", [round(p, 3) for p in probs])
# Cross-entropy is small when the true class gets a high probability.
print("cross-entropy if class 0 is right:", round(-math.log(probs[0]), 3))

# k-nearest neighbours: label a point by a vote of the closest examples.
examples = [((1, 1), "cat"), ((1, 2), "cat"), ((5, 5), "dog"), ((6, 5), "dog"), ((5, 6), "dog")]
def knn(point, k=3):
    nearest = sorted(examples, key=lambda e: math.dist(point, e[0]))[:k]
    return Counter(label for _, label in nearest).most_common(1)[0][0]

print("(2, 1) ->", knn((2, 1)))
print("(5, 4) ->", knn((5, 4)))

期待される出力

softmax: [0.659, 0.242, 0.099]
cross-entropy if class 0 is right: 0.417
(2, 1) -> cat
(5, 4) -> dog

仕組み

softmax()はスコアを指数関数に通し、その合計で割るので、3つの確率の合計は1になります。先に最大値を引くのはオーバーフローを防ぐためです。交差エントロピーは正解クラスの確率の−logです。knn()は例を距離順に並べ、最も近い3つに投票させます。

値を変更し、PythonをインストールせずにCodeUtilityオンラインPythonコンパイラで実行できます。

練習問題

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

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

チャレンジで練習する

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

すべてのチャレンジ