1. 程式人生 > >資料探勘之分類演算法---knn演算法(Matlab程式碼)

資料探勘之分類演算法---knn演算法(Matlab程式碼)

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結果截圖如下: