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コンパイラで実行できます。
練習問題
入力値と境界ケースを変更し、より大きなデータでも動作を確認してください。
- 入力や重みを変えて、実行前に出力を予想してみましょう。
- 途中の値を出力して、計算の各ステップを追いましょう。
- 下のリンクのチャレンジを解いて、自分でアイデアを実装しましょう。
チャレンジで練習する
このレッスンの内容を使って実際の問題を解きましょう。各チャレンジはブラウザで動き、すぐにテストされ、AI のレビューも受けられます。
- ソフトマックス関数 大きな値でもオーバーフローせずに、生のスコアを合計 1 の確率に変換します。 簡単
- カテゴリカル交差エントロピー損失 多クラス分類器の損失を、予測確率と正解クラスから計算します。 簡単
- k近傍法による分類 最も近い k 個の学習点の多数決でラベルを予測します。 中級
- ナイーブベイズ分類器 ベイズの定理とラプラス平滑化で、カテゴリ型の特徴量からクラスを予測します。 中級
- ジニ不純度 グループ内のラベルがどれだけ混ざっているかを測ります。決定木が分割を選ぶときの指標です。 簡単
- 情報利得 特徴量で分割したときにエントロピーがどれだけ減るかを計算します。ID3 決定木の基準です。 中級