KNN分類演算法原理及其Matlab實現
阿新 • • 發佈:2018-12-20
KNN演算法原理
K近鄰演算法是一種簡單的監督學習演算法。對於給定測試樣本,直接計算該樣本和訓練集的距離,將距離最近的k個“鄰居”點的類別作為參考,作為預測結果返回。
測試資料
程式碼
matlab版本:matlab R2017a
function KNN() clear all; clc; kk=2;%knn中k的取值 M=load("D:\畢業設計\資料集1\australian.txt"); %裝載資料集 [m,n]=size(M); indices=crossvalind('Kfold',M(1:m,n),10); %十折交叉,劃分訓練集和測試集 testindices=(indices==1); %測試集索引 trainindices=~testindices;%訓練集索引 trainset=M(trainindices,:); %獲取訓練集 testset=M(testindices,:);%獲取測試集 [testm,~]=size(testset); [trainm,trainn]=size(trainset); knnlabel=zeros(testm,1);%knn得到的標籤 distancev=zeros(trainm,1);%每個測試點與訓練集的歐式距離向量 for i=1:testm for j=1:trainm distancev(j)=0; for k=1:trainn-1 distancev(j)=distancev(j)+(testset(i,k)-trainset(j,k))^2; end distancev(j)=sqrt(distancev(j));%歐式距離 end [~,val]=sort(distancev); val=val(1:kk);%取k個最小的 class1=0; class2=0; for k=1:size(val,1) %對k個鄰居投票法計算標籤 if trainset(val(k),end)==0 class1=class1+1; else class2=class2+1; end end if class1>=class2 knnlabel(i)=0; else knnlabel(i)=1; end end acc=0; for i=1:testm if knnlabel(i)==testset(i,end) acc=acc+1; end end acc=acc/testm; disp('精度是:'); disp(acc); end