1. このユニットの範囲(重要)
E資格の「機械学習」科目のうち、2026年版シラバスで出題対象なのは パターン認識(k近傍法・距離計算)・過剰/過少適合・交差検証・性能指標です。 このレッスンはここに絞ります。
⚠ 範囲について: 線形回帰・ロジスティック回帰・SVM・決定木・ランダムフォレスト・主成分分析(PCA)・k-means などの古典的モデルは、 2026年版シラバスでは出題対象外(オプション)のため、本コースでは扱いません (これらをやさしく学びたい方は 機械学習入門コース へ)。 ここからは scikit-learn が動く(▶ 実行できる)ので、実際に手を動かしましょう。
2. パターン認識:k近傍法(kNN)
k近傍法は「近くにある k 個のデータの多数決」で分類する、最もシンプルな手法のひとつ。
学習は「データを覚えるだけ」、予測時に距離を測って近いものを探します。scikit-learn の KNeighborsClassifier で動かします。
ライブラリに頼らず kNN のアルゴリズムを自分で書くと、中身がはっきり分かります(コードの読み解きにも強くなります)。
やることは「① 距離を測る → ② 近い k 個を選ぶ → ③ 多数決」の3ステップだけ。上の KNeighborsClassifier と同じ結果になることを NumPy だけで確かめます。
n_neighbors(k)はハイパーパラメータで、小さすぎると過学習、大きすぎると鈍くなります。
3. 距離計算(ユークリッド・マンハッタン・コサイン)
kNN の「近さ」は距離で測ります。代表的な3つを NumPy で計算します。
💡 使い分け:
ユークリッドは素直な直線距離、マンハッタンは軸に沿った移動量。
コサインは「大きさ」より「向き」の近さを見る(文章ベクトルの類似度などで定番)。
コサインは類似度なので、距離にするなら 1 − コサイン類似度 とします。
4. 評価指標(混同行列・適合率・再現率・F1・ROC/AUC)
分類の性能は「正解率」だけでは不十分です。混同行列から、適合率・再現率・F1 を読み、ROC/AUC で総合力を見ます。
⚠ 医療では「再現率(見逃しの少なさ)」が重要: 病気を見逃す(偽陰性)と被害が大きいため、医療スクリーニングでは再現率を高く保つことが優先されがちです。 一方で適合率が下がると「無駄な精密検査」が増える——このトレードオフを指標で見極めます。 正解率だけでは、不均衡データ(病気がまれ)でこの問題を見落とします。
5. 交差検証(cross_val_score)
1回の train/test 分割では「たまたま」の影響が残ります。交差検証はデータを k 個に分け、 順番にテスト役を回して k 回評価し、平均を取ります。より安定した汎化性能の見積もりが得られます。
| 学習データ | 学習データ | 学習データ | 学習データ | 検証データ | モデル1 |
| 学習データ | 学習データ | 学習データ | 検証データ | 学習データ | モデル2 |
| 学習データ | 学習データ | 検証データ | 学習データ | 学習データ | モデル3 |
| 学習データ | 検証データ | 学習データ | 学習データ | 学習データ | モデル4 |
| 検証データ | 学習データ | 学習データ | 学習データ | 学習データ | モデル5 |
💡 過剰適合/過少適合との関係: 交差検証のスコアが訓練スコアより大きく低いなら過剰適合(過学習)のサイン。 どちらも低いなら過少適合(モデルが単純すぎ)。汎化性能を測る道具として交差検証は必須です。
6. 練習問題
kNN の k を変えてみる
n_neighbors を 3 にして kNN を学習・予測し、正解率を表示してください。
ヒントを見る(答え+解説)
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
X, y = load_breast_cancer(return_X_y=True)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=42)
# n_neighbors=3 の kNN を作って学習・予測し、正解率を表示してください
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_tr, y_tr)
pred = knn.predict(X_te)
print("正解率:", round(accuracy_score(y_te, pred), 4)) # 0.9415
k=3 にすると、k=5 のときと正解率が少し変わります(このデータでは 0.9415)。
k はハイパーパラメータ。交差検証で良い値を選ぶのが定石です。
マンハッタン距離を計算する
2点 a, b のマンハッタン距離(各成分の差の絶対値の合計)を計算してください。
ヒントを見る(答え+解説)
import numpy as np
a = np.array([2.0, 5.0, 1.0])
b = np.array([4.0, 1.0, 1.0])
# マンハッタン距離を計算してください(|差|の合計)
manhattan = np.abs(a - b).sum()
print("マンハッタン距離:", manhattan) # 6.0 になるはず
差は [-2, 4, 0]、絶対値は [2, 4, 0]、合計 6.0。
ユークリッドなら √(4+16+0)=√20≈4.47 と違う値になります。
再現率を計算する
予測 pred と正解 y_te から、再現率(recall)を計算して表示してください。
ヒントを見る(答え+解説)
...
pred = knn.predict(X_te)
# 再現率を計算して表示してください
recall = recall_score(y_te, pred)
print("再現率:", round(recall, 4)) # 0.9907
recall_score(正解, 予測) の順で渡します。再現率が高い=陽性の見逃しが少ない。医療で重視される指標です。
7. まとめ
このレッスンのポイント
- 本ユニットの範囲はパターン認識・距離・評価指標・交差検証(SVM/決定木/PCA/k-means等は範囲外)
- kNN は「近い k 個の多数決」。スケールに敏感で、k はハイパーパラメータ
- 距離:ユークリッド(直線)・マンハッタン(軸沿い)・コサイン(向き)
- 評価:混同行列から適合率・再現率・F1、総合は ROC-AUC
- 医療では再現率(見逃しの少なさ)が重視されやすい。正解率だけでは不十分
- 交差検証でk回評価し平均を取る=安定した汎化性能の見積もり
自由に試してみましょう(k を変えて交差検証の平均スコアを比べる)。
完了するとコース一覧に進捗が記録されます