參考
1、計算已知類別資料集合彙總的點與當前點的距離
2、按照距離遞增次序排序
3、選取與當前點距離最近的k個點
4、確定距離最近的前k個點所在類別的出現頻率
5、返回距離最近的前k個點中頻率最高的類別作為當前點的**分類
function
relustlabel = knn
(inx,data,labels,k)
%% % inx 為 輸入測試資料,data為樣本資料,labels為樣本標籤
%%[datarow , datacol] = size(data);
diffmat = repmat(inx,[datarow,1]) - data ;
distancemat = sqrt(sum(diffmat.^2,2));
[b , ix] = sort(distancemat,'ascend');
len = min(k,length(b));
relustlabel = mode(labels(ix(1:len)));
end
function
knndatgingtest
%%clc
clear
close all
%%data = load('datingtestset2.txt');
datamat = data(:,1:3);
labels = data(:,4);
len = size(datamat,1);
k = 4;
error = 0;
% 測試資料比例
ratio = 0.1;
numtest = ratio * len;
% 歸一化處理
maxv = max(datamat);
minv = min(datamat);
range = maxv-minv;
newdatamat = (datamat-repmat(minv,[len,1]))./(repmat(range,[len,1]));
% 測試
fori = 1:numtest
classifyresult = knn(newdatamat(i,:),newdatamat(numtest:len,:),labels(numtest:len,:),k);
fprintf('測試結果為:%d 真實結果為:%d\n',[classifyresult labels(i)])
if(classifyresult~=labels(i))
error = error+1;
endend fprintf('準確率為:%f\n',1-error/(numtest))
end
Matlab實現加權K近鄰
加權k近鄰是k近鄰的一種修正,當理解k近鄰之後,加權k近鄰則很好理解了,不說了,上 function label1 wknn training,testing,k row,column size training row1,column1 size testing 計算測試集與訓練集的距離 dist...
k近鄰演算法matlab實現 K 近鄰演算法(一)
k 近鄰演算法是採用不同特徵之間的距離方法進行分類。優點 精度高 對異常值不敏感 無資料輸入假定 缺點 計算複雜度高 空間複雜度高 k 近鄰演算法的一般流程 1 收集資料集 可以使用任何方法 2 準備資料集 距離計算所需要的數值,最好是結構化的資料格式 3 分析資料 可以使用任何方法 4 訓練資料集...
MATLAB計算K近鄰
在實驗中經常會需要計算k近鄰,為了避免多次重寫,這裡用matlab實現了乙個計算k近鄰的函式,該函式要求輸入兩個引數,第乙個引數就是資料矩陣,要求每行為乙個多維樣本點,第二個引數就是k值了。函式返回k近鄰矩陣。計算k近鄰比較好的一種演算法是利用kd樹,這裡暫且用的是易於理解的常規方法。使用kd樹的 ...