knn算法(k-Nearest Neighbor algorithm).是一種經典的分類算法.
注意,不是聚類算法.所以這樣的分類算法必定包含了訓練過程.
然而和一般性的分類算法不同,knn算法是一種懶惰算法.它並不是
像其它的分類算法先通過訓練建立分類模型.,而是一種被動的分類
過程.它是邊測試邊訓練建立分類模型.
算法的一般描寫敘述步驟例如以下:
1.首先計算每一個測試樣本點到其它每一個點的距離.
這個距離能夠是歐氏距離,余弦距離等.
2. 然后取出距離小於設定的距離閾值的點.
這些點即為依據閾值圍繞在測試樣本最鄰近的點.
3.選出這些鄰近點中比例最大的點簇的類.
那么就將概測試點歸入此類.
注意:knn算法的開銷非常大,由於要計算每一個樣本點到其它全部點的距離.
knn算法的距離一般要依據實際樣本點的情況來選取.
knn算法的距離閾值要依據樣本的分散集中程度來選取.經驗一般選取樣本點集合的均方差.
以下是一個matlab中運用knn函數分類的樣例.
clc; clear; load 'Train_Data.mat' %加載訓練數據 load 'Train_Label.mat' %加載訓練分類標簽 test_data=[43; 42; 192; 193]; %測試數據 %knnclassify為matlab提供的knn分類函數. %參數test_data是待分類的測試數據 %Train_Data是用於knn分類器訓練的數據 %Train_Label是訓練的分類標簽 %3,即為knn的k值.意思是取某個待分類測試樣本點周圍三個樣本點 %'cosine'---為距離度量,這里採用余弦距離 %'random'---為分類規則.怎樣對k個臨近點進行分類. % 'k'--即為對測試數據的knn分類結果的類標簽 k=knnclassify(test_data,Train_Data',Train_Label',3,'euclidean','random');
Train_Data.mat截圖例如以下:
Train_Label.mat截圖例如以下:
k結果截圖例如以下:
轉載請注明作者:小劉