プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

最近傍分類器(k-NN)の特徴とは?仕組みと主な特性をわかりやすく解説

最近傍法(Nearest Neighbor法)は、訓練データがどのような分布から得られたかについて事前の仮定を置く必要がなく、多くの場面で高い分類性能を発揮するシンプルな手法です。訓練セットには陽性・陰性の両方の事例が含まれており、新しいサンプルは近傍の訓練事例との距離を計算することで分類されます。

k-NN(k近傍法)分類器はこの考え方を拡張したもので、最も近いk個の点を参照し、その多数決によってクラスを決定します。同点(タイ)が発生しないよう、kには小さな奇数(一般的には1、3、5など)を選ぶのが一般的です。kの値を大きくすると訓練データ内のノイズの影響を抑える効果があり、最適なkは交差検証(クロスバリデーション)を通じて決定されます。

最近傍分類器の主な特徴

1. インスタンスベース学習の一種

最近傍分類は、インスタンスベース学習と呼ばれるより一般的なアプローチの一部です。この手法では、データから抽象化されたモデルを構築するのではなく、具体的な訓練インスタンスそのものを用いて予測を行います。

インスタンスベース学習アルゴリズムでは、インスタンス間の類似度や距離を判定するための近接度(proximity measure)と、テストインスタンスが他のインスタンスとどれだけ近いかにもとづいて予測クラスを返す分類関数が必要となります。

2. 怠惰学習(Lazy Learning)である

最近傍分類器を含む怠惰学習器(lazy learner)は、事前のモデル構築を必要としません。その一方で、テストサンプルの分類は必ずしも安価ではありません。テスト事例と各訓練事例との間で近接度を個別に計算する必要があるため、コストが高くなる場合があります。

これに対し、熱心学習器(eager learner)は計算リソースの大部分をモデル構築に費やしますが、モデルが一度構築されてしまえば、テストサンプルの分類は非常に高速に行えます。

3. 局所情報に基づく予測

最近傍分類器は局所的なデータにもとづいて予測を行うのに対し、決定木やルールベース分類器は入力空間全体に適合するグローバルなモデルを見つけようとします。分類判断が局所的に行われるため、最近傍分類器はノイズの影響を受けやすいという弱点があります。

4. 任意の形状を持つ決定境界

最近傍分類器は、任意の形状の決定境界を作り出すことができます。これにより、直線的(矩形的)な決定境界しか表現できない決定木やルールベース分類器と比べて、はるかに柔軟なモデル表現が可能になります。

5. 適切な近接度とデータ前処理が不可欠

適切な近接度の選択とデータの前処理が行われていない場合、最近傍分類器は誤った予測を生み出す可能性があります。

たとえば、身長(メートル単位)と体重(ポンド単位)という属性にもとづいて人を分類する場面を考えてみましょう。身長の変動幅は1.5m〜1.85m程度と小さいのに対し、体重は90ポンド〜250ポンドと大きく変動します。属性のスケールを考慮せずに近接度を計算すると、距離の計算結果は体重の差異に支配されてしまい、身長の情報がほとんど反映されなくなります。このような問題を防ぐためには、正規化などの前処理が重要です。

  1. C#のコメントとは?複数行・単一行コメントの書き方を解説

    コメントは、コードの内容や意図を説明するために記述する注釈です。コンパイラはコメント部分を完全に無視するため、プログラムの動作には一切影響しません。C#では、複数行にわたるコメントは「/*」で始まり、「*/」で終わります。 複数行コメント /* 以下はC#における 複数行コメントの例です */ 「/* ... */」で囲まれた範囲はすべてコンパイラによって無視されます。処理の概要や注意点など、複数行にわたる説明を残したい場合に使用します。 単一行コメント // 変数の宣言 int a = 10; 単一行コメントは「//」から行末までがコメントとして扱われます。変数の意味や処理の意図を手軽にメモ

  2. Java 9のモジュールシステムとは?モジュールの主な特徴と基本ルールを解説

    Java 9における「モジュール」とは Java 9で導入されたモジュール(Module)とは、コード・データ・リソースをひとまとめにした集合体のことです。具体的には、クラス、抽象クラス、インターフェースといった関連性のあるパッケージや型と、それらを構成するデータファイルや静的リソースを、論理的な単位としてグループ化したものを指します。 モジュールシステム(Project Jigsaw)により、Javaアプリケーションはこれまでよりも明確な依存関係管理と強力なカプセル化を実現できるようになりました。 モジュールの主な特徴 他のモジュールと通信するためのインターフェースを定義しなければなりま