1. 異次元に分散したデータの分類性能
アイリスを例に挙げてみましょう。
アヤメのデータ セットは次のとおりです (アヤメ、アヤメ、カラムス アオイを表すには 0、1、2 を使用します)。
(Iris データセットには合計 4 つの次元特徴があることがわかります)
アヤメのデータにおけるさまざまな種のアヤメのがく片の長さとがく片の幅のサンプル分布:
図からわかるように、がく片の長さとがく片の幅という 2 つの特徴的な寸法では、カテゴリ 0 はカテゴリ 1、2 からある程度の認識があり、予備的な分類が可能ですが、カテゴリ 1 とカテゴリ 2 はまだ認識されていないことがわかります。分類できません。
次に、Iris データセットを 3 つのデータ次元で見てみましょう。
現時点では 3 つのカテゴリが層別化されていることがわかり、現時点で 3 つのカテゴリすべてを分類できます。
これは、さまざまな次元に分散されたデータのカテゴリ表現です。
2. KNNアルゴリズムの原理
KNN は、複雑な数学的推論を必要としない例ベースの学習であり、その分類プロセスはデータ セットの分類に直接基づいているため、分類後まですべての計算を延期する遅延学習アルゴリズムとも呼ばれます。
分類アルゴリズムのフローは次のとおりです。
(1) テストデータと訓練データの固有値間の距離を計算する
(2) 距離をルールに従って並べ替える(増分)
(3) 分類を決定するk個の最近傍データを選択する(投票方法)
(4) 予測試験データの分類
3. いくつかの一般的な距離計算方法
(1) ユークリッド距離
(2) マンハッタン距離(タクシー形状)
(3) チェビシェフ距離
(4) ミンコフスキー距離
4. kdツリー
kd ツリーは、データ点が配置される k 次元空間を分割するデータ構造で、主に多次元空間でのキー データの検索に使用され、本質的には平衡二分木です。
KNN アルゴリズムを使用してテスト データ ポイントを分類する場合、テスト データ ポイントとトレーニング サンプル セット内の各データ ポイントの間の距離を計算し、距離を並べ替えて、k 個の最近傍サンプル データを見つける必要があります。この方法の利点はシンプルで効果的であることですが、学習サンプルが大きすぎる場合、この方法の計算プロセスに時間がかかり、KNN アルゴリズムの検索効率を向上させ、計算数を減らすことができます。距離計算、k 次元 (k 次元、 kd ) ツリー法。
5. KNNアルゴリズム実戦
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from sklearn.neighbors import KDTree
from sklearn import datasets
from sklearn.model_selection import train_test_split
iris=datasets.load_iris()
data_train,data_test,target_train,target_test=train_test_split(iris.data,iris.target,test_size=0.3)
# 定义一个KNN分类器对象,n_neighbors为k值,algorithm是算法
knn=KNeighborsClassifier(n_neighbors=3,algorithm='kd_tree')
knn.fit(data_train,target_train)
# 把测试集的数据集传入即可得到模型的评分
score=knn.score(data_test,target_test)
# 预测给定样本数据对应的标签
predict=knn.predict([[0.1,0.2,0.3,0.4]])
print(score)
print(predict)
操作結果: