K近傍教師あり学習マシンアルゴリズムの詳細な分析

K近傍教師あり学習マシンアルゴリズムの詳細な分析

翻訳者 | 朱 仙中

校正 | 梁哲、孫淑娟

K 近傍法 (KNN) は、機械学習アルゴリズムにおける回帰および分類タスクを解決するために使用できる教師あり学習マシン アルゴリズムです。

KNN は、現在のトレーニング データ ポイントの特性に基づいて、テスト データ セットに対して予測を行うことができます。これは、類似したものが近接して存在するという仮定の下で、テスト データとトレーニング データ間の距離を計算することによって行われます。

アルゴリズムは学習したデータを保存し、新しいデータ ポイントの予測と分類をより効果的にします。新しいデータ ポイントが入力されると、KNN アルゴリズムはデータの特性を学習できます。次に、その新しいデータ ポイントを、同じ機能を共有する現在のトレーニング データ ポイントの近くに配置します。

1. KNNにおけるKの意味

簡単に言えば、KNN の「K」は、最も近い近傍の数を表すパラメーターです。 K は正の整数で、通常は小さい値であり、奇数にすることが推奨されます。 K 値はデータ ポイントのコンテキストを作成し、どのデータ ポイントがどのクラスに属しているかを指定しやすくなります。

以下の例では 3 つのグラフを示しています。まず、最初の画像はデータの初期化を完了する役割を担い、データ ポイントを描画して異なるカテゴリ (A と B) に割り当て、分類する新しいサンプルを提供します。 2 番目の画像は距離計算を完了する役割を果たします。この図では、新しいサンプル データ ポイントから最も近いトレーニング データ ポイントまでの距離が計算されます。ただし、これではまだ新しいサンプル データ ポイントの分類は完了しません。したがって、K 値を使用すると、基本的に、新しいサンプル データ ポイントを分類できる近傍が作成されます。

したがって、k = 3 の場合、新しいデータ ポイントはタイプ B に属すると言えます。新しいデータ ポイントと同様の特性を持つタイプ B のトレーニング済みデータ ポイントがタイプ A よりも多く存在するためです。

チャート出典: datacamp.com

K 値を 7 に増やすと、新しいデータ ポイントはタイプ A に属します。新しいデータ ポイントと同様の特徴を持つタイプ A のトレーニング済みデータ ポイントがタイプ B よりも多く存在するためです。

チャート出典: datacamp.com

K が大きくなるとエラー率も増加するため、K は通常は小さい数値です。次の図はこれを示しています。

チャートソース: analyticsvidhya

ただし、K の値が小さい場合、バイアスは低くなりますが分散は高くなり、モデルが過剰適合することになります。

また、K は奇数に指定することをお勧めします。新しいデータ ポイントを分類しようとしたときに、クラスが偶数個しかない場合 (タイプ A とタイプ B など)、不正確な出力が生成される可能性があるためです。したがって、「同点」の状況を避けるために、奇数の K 値を選択することを強くお勧めします。

2. 距離を計算する

KNN は、新しいデータ ポイントを分類するために、データ ポイント間の距離を計算します。 KNN でこの距離を計算するために最も一般的に使用される方法は、ユークリッド法、マンハッタン法、ミンコフスキー法です。

ユークリッド距離は、2 点間の直線の長さを使用して計算される 2 点間の距離です。ユークリッド距離の式は、新しいデータ ポイント (x) と既存のトレーニング データ ポイント (y) の差の二乗の合計の平方根です。

マンハッタン距離は 2 点間の距離であり、直交座標の絶対差の合計です。マンハッタン距離の式では、座標軸上の線分を使用して、新しいデータ ポイント (x) と既存のトレーニング データ ポイント (y) 間の長さの合計を計算します。

ミンコフスキー距離は、正規化されたベクトル空間内の 2 点間の距離であり、ユークリッド距離とマンハッタン距離を一般化したものです。ミンコフスキー距離の式で p=2 の場合、ユークリッド距離 (L2 距離とも呼ばれる) が得られます。 p = 1 の場合、マンハッタン距離 (L1 距離とも呼ばれる)、または都市ブロック距離 (LASSO 距離とも呼ばれる) が得られます。

対応する式を下の図に示します。

次の図は、3 つの違いを説明しています。

チャート出典: Packt Subscription

3. KNNアルゴリズムの動作原理

  1. KNN アルゴリズムの動作手順は以下の通りです。
  2. データセットの読み込み
  3. K の値を選択します。同点の状況を避けるために奇数をお勧めします。
  4. 新しいデータ ポイントとそれに隣接する既存のトレーニング データ ポイント間の距離を計算します。

新しいデータ ポイントに最も近い K 個の隣接ポイントを検索します。

次の図はこれらの手順の概要を示しています。

画像ソース: kdnuggets.com

4. KNNアルゴリズム分類タスクの適用例

以下は、Iris データセットを使用した分類タスクで KNN アルゴリズムを使用する例です。

1. ライブラリをインポートする

 numpyをnp としてインポートする
matplotlib .pyplotを plt としてインポートします。
pandasをpd としてインポートする

2. アイリスデータセットをロードする

 url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

#列名を指定する
names = [ 'がく片の長さ' , 'がく片の幅' , '花弁の長さ' , '花弁の幅' , 'クラス' ]

#データセットを読み込む
データセット= pd .read_csv ( url 名前=名前)

これまでの実行結果は次のとおりです。

3. データ前処理

これは、データセットを属性とラベルに分割するために行われます。 X 変数にはデータセットの最初の 4 つの列 (属性と呼ぶ) が含まれ、y 変数には最後の列 (ラベルと呼ぶ) が含まれます。

 X =データセット.iloc [ : , : - 1 ] .値
y =データセット.iloc [ :, 4 ] .値

4. トレーニングセットとテストセットに分割する

このステップでは、データセットをトレーニング部分とテスト部分に分割して、アルゴリズムがトレーニング データをどの程度学習したか、テスト データでどの程度パフォーマンスを発揮するかを確認します。

 sklearn.model_selection からtrain_test_split をインポートします
X_train X_test y_train y_test = train_test_split ( X y test_size = 0.20 )

5. 機能のスケーリング

特徴スケーリングは、予測前のデータ前処理における重要なステップです。データの特徴範囲を正規化するには、次の方法を使用します。

 sklearn.preprocessing からStandardScaler をインポートします
スケーラー=標準スケーラー( )
スケーラー.fit ( X_train )

X_train = スケーラー.変換( X_train )
X_test = スケーラー.変換( X_test )

6. KNNを使用して予測を行う

まず、sklearn.neighbors ライブラリから KNeighborsClassifier クラスをインポートし、K 値を選択する必要があります。この例では、7 を選択しました (同点状況を回避するために奇数値を選択することを強くお勧めします)。

 sklearn.neighbors からKNeighborsClassifier をインポートします
分類子= KNeighborsClassifier ( n_neighbors = 7 )
分類器.fit ( X_train , y_train )

次に、テスト データセットで予測を実行します。

y_pred = 分類器.予測(X_test)

7. アルゴリズムの精度評価

sklearn.metrics ライブラリの助けを借りて、分類レポートを通じてアルゴリズムの精度を評価し、精度、再現率、F1 スコアを確認できます。

 sklearn.metrics からclassification_reportをインポート
印刷(分類レポート( y_test y_pred ) )

コードを実行した結果は次のとおりです。

このことから、KNN アルゴリズムは 30 個のデータ ポイントを平均全体精度 95%、再現率 93%、F1 スコア 94% で分類したことがわかります。

8. 適切なK値を見つける

この例では、K 値として 7 を選択しました。 K の最適値が何であるかを確認したい場合は、K のさまざまな値とそれによって生じるエラー率を示すグラフを生成できます。 1から30までのKの値を調べます。これを行うには、1 から 30 までのループを実行し、各ループで平均エラーを計算してエラー リストに追加する必要があります。関連するコードは次のとおりです。

エラー= [ ]
#1から30までのK値のエラー率を計算する
i が範囲( 1 , 30 ) 場合:
knn = K近隣分類子( n_近隣= i )
knn .fit ( X_train , y_train )
pred_i = knn.predict ( X_test )
エラー.append ( np .mean ( pred_i != y_test ) )

K値のエラー率のグラフを描きます。

 plt .figure (図サイズ= ( 12 , 5 ) )
plt .plot (範囲( 1 , 30 ) エラー= '赤' マーカー= 'o'
マーカーフェイスカラー= '黄色' マーカーサイズ= 10 )
plt .title ( 'エラー率 K 値' )
plt .xlabel ( 'K値' )
plt .ylabel ( '平均誤差' )

出力グラフは次のようになります。

グラフィックソース: 著者のルーチンの出力

上図から、平均誤差が0となるK値は主にk値13~23の間であることが分かります。

V. 結論

KNN は実装が簡単で、機械学習プロセスで回帰タスクや分類タスクを実行するために使用できるシンプルな機械学習アルゴリズムです。このうち、K 値は最も近い近傍の値を表すパラメータです。実際のアプリケーションでは、K 値を奇数に指定することをお勧めします。さらに、KNN アルゴリズムではさまざまな距離メトリックを選択できます (最も一般的なものはユークリッド距離、マンハッタン距離、ミンコフスキー距離です)。

オリジナルリンク: https://www.kdnuggets.com/2022/04/nearest-neighbors-classification.html

翻訳者紹介

Zhu Xianzhong 氏は、51CTO のコミュニティ エディターであり、51CTO の専門ブロガー兼講師であり、濰坊の大学のコンピューター教師であり、フリーランス プログラミング コミュニティのベテランです。初期にはさまざまな Microsoft テクノロジに注力し (ASP.NET AJX および Cocos 2d-X に関連する 3 冊の技術書を編纂)、オープンソースの世界に 10 年近く携わってきました (人気のフルスタック Web 開発テクノロジに精通)。OneNet/AliOS+Arduino/ESP32/Raspberry Pi をベースとした IoT 開発テクノロジや、Scala+Hadoop+Spark+Flink などのビッグデータ開発テクノロジを理解しています。

<<:  440億ドル!マスク氏がツイッター買収に成功 トランプ氏「アカウントが復活してもツイッターは使わない」

>>:  AIの安全性問題への対応: NIST人工知能リスク管理フレームワーク

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

アルゴリズム問題の分析プロセス

[[384555]]トピックを理解する最近アルゴリズムの問​​題をたくさん見ていますが、小さな問題を...

人工知能に対する期待と不安

AI は世界を変えようとしていますが、問題は、それがどのように起こるか誰も予測できないことです。過去...

「アルゴリズムとデータ構造」二分木の美しさ

[[349809]]序文今回レビューする内容は、データ構造トピックの「ツリー」です。ツリーなどのデー...

4090はA100の代替品になるのでしょうか?トークン生成速度はA100よりわずか18%低い。上海交通大学の推論エンジンが人気。

それだけでなく、PowerInfer は、モデルの精度を維持しながら、単一の RTX 4090 (2...

ネイチャー誌が量子コンピューティングの大きな進歩を発表:史上初の量子集積回路が実現

6月23日、オーストラリアの量子コンピューティング企業SQC(Silicon Quantum Com...

機械翻訳の3つのコア技術原則 | AI知識の普及

機械翻訳技術は 80 年以上にわたって開発されてきました。バベルの塔の伝説は過去のものとなりました。...

顔認識はどのように機能しますか?

顔認識は、テクノロジーを通じて人の顔を識別する方法です。顔認識システムは生体認証技術を使用して、写真...

...

スマートテクノロジーは高齢化問題の解決に役立つでしょうか?

世界保健機関によれば、2050年までに世界中で約20億人が60歳以上になると予想されています。これら...

悲劇!ウーバー、自動運転車が人をはねて死亡させたため全テストを中止

ウーバー、自動運転車が人をはねて死亡させたため全テストを中止 アメリカ現地時間19日朝、アリゾナ州...

百度は「ニューラル条件付きランダムフィールド」病理スライス分析アルゴリズムをオープンソース化、専門病理学者よりも高い精度を実現

最近、百度研究所は論文で「ニューラル条件付きランダムフィールド」病理スライス分析アルゴリズムを提案し...

...

ベアリングポイント調査 - 2022 年の 5 つのテクノロジー トレンド

[[429514]]ベアリングポイントは、IT リーダーが今後 1 年間にどのテクノロジー分野に重点...

ニューラル放射線フィールドは「神経」を取り除き、3D効果の品質を低下させることなくトレーニング速度を100倍以上向上させます。

2020年、カリフォルニア大学バークレー校、Google、カリフォルニア大学サンディエゴ校の研究者...