KNN(python実装)
1425 ワード
kNNアルゴリズムフロー
一般的にkNNは,(1)データ収集:トレーニングサンプル集合テストデータの決定;(2)試験データと訓練サンプルセットの各サンプルデータの距離を計算する.
一般的な距離計算式:ヨーロッパ式距離式:d(x,y)=Σni=1(xi−yi)2−−−−−−−−−−−−−−−−√d(x,y)=Σi=1 n(xi−yi)2マンハッタン距離式:d(x,y)=Σni=1|xi−yi|d(x,y)=Σi=1 n|xi−yi|(3)は照射距離が増加する順に並べ替えられる.(4)最も近いk個の点を選択する.(5)このk点における分類情報の頻度を決定する.(6)前k点で最も頻度の高い分類を返し,現在のテストデータの分類とする.
主なコード:
注意:ここではマトリクス演算を用いて、試験サンプルと各訓練サンプルとの間のL 2距離 を計算する. KNNの不足は、1つのサンプルを予測するたびに、訓練サンプル全体に対して距離測定を行い、時間がかかることである. したがって,対応するKD−Treeはこの問題をうまく解決し,すべてのサンプルを遍歴することなくcoor点に最も近いK個点のシーケンス番号を求めることができる.詳細手順は、前述の「KD-TreeのC++実装」 を参照してください.
参考資料:https://blog.csdn.net/moxigandashu/article/details/71169991
一般的にkNNは,(1)データ収集:トレーニングサンプル集合テストデータの決定;(2)試験データと訓練サンプルセットの各サンプルデータの距離を計算する.
一般的な距離計算式:ヨーロッパ式距離式:d(x,y)=Σni=1(xi−yi)2−−−−−−−−−−−−−−−−√d(x,y)=Σi=1 n(xi−yi)2マンハッタン距離式:d(x,y)=Σni=1|xi−yi|d(x,y)=Σi=1 n|xi−yi|(3)は照射距離が増加する順に並べ替えられる.(4)最も近いk個の点を選択する.(5)このk点における分類情報の頻度を決定する.(6)前k点で最も頻度の高い分類を返し,現在のテストデータの分類とする.
主なコード:
from numpy import *
import operator
# KNN
# :( , , ,k )
def classify(inX,dataSet, labels, k):
dataSetSize = dataSet.shape[0]
diffMat = tile(inX,(dataSetSize,1))-dataSet
sqDiffMat=diffMat**2
sqDistances=sqDiffMat.sum(axis=1)
distances=sqDistances**0.5 #
sortedDistIndicies=distances.argsort() # index
# k
classCount={}
for i in range(k):
voteIlabel=labels[sortedDistIndicies[i]]
#D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.
classCount[voteIlabel]=classCount.get(voteIlabel,0)+1
# ,
sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
return sortedClassCount[0][0]
注意:
参考資料:https://blog.csdn.net/moxigandashu/article/details/71169991