KNN算法概述:
1.KNN算法是通過已有的數(shù)據(jù),已有的標(biāo)簽潭流,對新數(shù)據(jù)進(jìn)行分類竞惋。
2.分類依據(jù):找最近的K個點,大部分人所在的集合灰嫉,就是我所在的集合拆宛。
3.K的意思:最近的K個點。
舉例:2(a類),8(b類),11(a類),30(c類),45(c類),70(a類)
我的值為15讼撒,取K=3浑厚。
最近的點為:2,8,11
a類2個,b類1個根盒,c類0個
那么我是a類的
一钳幅、數(shù)據(jù)
以矩陣形式存儲,此處采用二維(即特征值兩個)
一炎滞、訓(xùn)練數(shù)據(jù)敢艰,標(biāo)簽,測試數(shù)據(jù)
我們得到矩陣册赛,形式如下
trainData = [1.0,2.0;1.2,0.1;0.1,1.4;0.3,3.5]; %為4×2矩陣盖矫,每一個數(shù)據(jù)為橫向
trainClass = [1; 1; 2; 2]; %標(biāo)簽4×1
testData = [0.5, 2.3];
二、距離表示
采用歐氏距離
先將testData擴展到與trainData同等形式的矩陣击奶,使得每個值直接相減
temp = repmat(testData, [size(trainData,1), 1]); %將測試點分化為訓(xùn)練集的數(shù)量
dist = (temp - trainData).^2; %計算距離各個點的距離辈双,采用歐式距離法
dist = sqrt(sum(dist, 2));
三、對距離進(jìn)行排序
[sorted, sortedIndex] = sort(dist); %此時得到sorted 為4×1的矩陣柜砾, 而Index下標(biāo)為4*1
四湃望、第四步我們是對其類別進(jìn)行思考
采用k個臨近點,此處采用k=3
我們用count數(shù)組(與標(biāo)簽對應(yīng))痰驱,記錄K個相近頂點中相應(yīng)標(biāo)簽的個數(shù)
k = 3;
count = zeros(1, length(unique(trainClass)));
for i = 1:k
count(trainClass(sortedIndex(i))) = count(trainClass(sortedIndex(i))) + 1;
end
五证芭、找出count數(shù)組中的最大值,也就是其分類結(jié)果
[Max, result] = max(count);
Max為最大值担映,result為最大值在count的下標(biāo)废士,(恰好代表標(biāo)簽)。