解答と解説を表示
<h4>k-最近傍法 (k-Nearest Neighbors, k-NN) とは?</h4>
<p>k-NNは、分類・回帰に用いられるシンプルな<strong>教師あり学習</strong>アルゴリズムです。「怠惰学習」とも呼ばれ、明示的なモデル学習フェーズを持ちません。予測時には、新しいデータ点(テスト点)と最も近い \(k\) 個の訓練データ点(近傍点)を探し、それらの情報(クラスラベルや値)に基づいて予測を行います。</p>
<h4>アルゴリズムのステップ(分類の場合)</h4>
<ol>
<li><strong>距離計算:</strong> テスト点と全ての訓練点との距離を計算します。</li>
<li><strong>近傍点の選択:</strong> 距離が近い順に \(k\) 個の訓練点を選びます(\(k\)はハイパーパラメータ)。</li>
<li><strong>多数決:</strong> \(k\) 個の近傍点のクラスラベルで最も多数を占めるクラスを、テスト点のクラスとして予測します。</li>
</ol>
<h4>距離指標: ユークリッド距離</h4>
<p>ステップ1の距離計算で最も一般的に用いられるのがユークリッド距離です。2点 \(P_1(x_1, y_1)\) と \(P_2(x_2, y_2)\) の間の直線距離を表します。</p>
<div class="formula">
$ d(P_1, P_2) = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}$
</div>
<h4>計算ステップ</h4>
<p>テスト点 \(P_{test} = (2, 3)\) と訓練点 \(P_1 = (1, 1)\) の間のユークリッド距離 \(d_1\) を計算します。</p>
<div class="formula">
$ d_1 = d(P_{test}, P_1) = \sqrt{(1 - 2)^2 + (1 - 3)^2} \\\
= \sqrt{(-1)^2 + (-2)^2} = \sqrt{1 + 4} = \sqrt{5} \\\
\approx 2.23606...$
</div>
<p>小数点以下3桁まで求めると、距離は約 <strong>2.236</strong> です。</p>
<p><strong>(参考) テスト点と訓練点 \(P_2=(4, 5)\) の距離 \(d_2\):</strong></p>
<div class="formula">
$ d_2 = d(P_{test}, P_2) = \sqrt{(4 - 2)^2 + (5 - 3)^2} = \sqrt{2^2 + 2^2} = \sqrt{4 + 4} = \sqrt{8} \approx 2.828$
</div>
<p>もし \(k=1\) なら、距離がより近い \(P_1\) のクラスが予測結果となります。</p>
<div class="key-point">
<div class="key-point-title">重要ポイント:k-NN</div>
<ul>
<li><strong>シンプルさ:</strong> アルゴリズムが直感的で理解しやすい。</li>
<li><strong>非線形性:</strong> 複雑な決定境界を表現できる。</li>
<li><strong>計算コスト:</strong> 予測時に全訓練データとの距離計算が必要で、データ量が多いと遅い。</li>
<li><strong>\(k\) の選択:</strong> \(k\) の値が性能に大きく影響する(小さいと過学習、大きいと過度に平滑化)。</li>
<li><strong>スケーリング:</strong> 特徴量のスケールを揃える(標準化など)ことが重要。</li>
<li><strong>距離指標:</strong> ユークリッド距離以外(マンハッタン距離、コサイン類似度など)も利用される。</li>
</ul>
</div>