數據挖掘之分類算法---knn算法(有matlab例子)


knn算法(k-Nearest Neighbor algorithm).是一種經典的分類算法.注意,不是聚類算法.所以這種分類算法

必然包括了訓練過程.


然而和一般性的分類算法不同,knn算法是一種懶惰算法.它並非像其他的分類算法先通過訓練建立分類模型.,而

是一種被動的分類過程.它是邊測試邊訓練建立分類模型.


算法的一般描述過程如下:

1.首先計算每個測試樣本點到其他每個點的距離.這個距離可以是歐氏距離,余弦距離等.

2.然后取出距離小於設定的距離閾值的點.這些點即為根據閾值環繞在測試樣本最鄰近的點.

3.選出這些鄰近點中比例最大的點簇的類.那么就將概測試點歸入此類.



注意:knn算法的開銷很大,因為要計算每個樣本點到其他所有點的距離.

       knn算法的距離一般要根據實際樣本點的情況來選取.

          knn算法的距離閾值要根據樣本的分散集中程度來選取.經驗一般選取樣本點集合的均方差.

    


下面是一個matlab中運用knn函數分類的例子.

 1 clc;
 2 clear;
 3 
 4 load 'Train_Data.mat' %載入訓練數據
 5 
 6 load 'Train_Label.mat' %載入訓練分類標簽
 7 
 8 
 9 test_data=[43;
10            42;
11            192;
12            193];       %測試數據
13 
14 %knnclassify為matlab提供的knn分類函數.
15     %參數test_data是待分類的測試數據
16     %Train_Data是用於knn分類器訓練的數據
17     %Train_Label是訓練的分類標簽
18     %3,即為knn的k值.意思是取某個待分類測試樣本點周圍三個樣本點
19     %'cosine'---為距離度量,這里采用余弦距離
20     %'random'---為分類規則.如何對k個臨近點進行分類.
21     % 'k'--即為對測試數據的knn分類結果的類標簽
22 
23 k=knnclassify(test_data,Train_Data',Train_Label',3,'euclidean','random');

 

Train_Data.mat截圖如下:


Train_Label.mat截圖如下:


k結果截圖如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM