<span style="font-size:18px;"><span style="font-size:18px;">%% 清空环境变量
clear all;
clear;
clc;
load('train.mat');
load('testData.mat');
[m,n]=size(TrainData);
[m1,n1]=size(TestData);
answer=zeros(m1,1);
distance=zeros(m,1);
k=3;%k近邻,k最好奇数
for i=1:m1 %总循环
trainlabels=trainLabel;
for j=1:m %计算测试数据于训练数据间的欧式距离
def=0;
for kk=1:n
def=(TestData(i,kk)-TrainData(j,kk))^2+def;
end
distance(j)=sqrt(def);
end
for ii=1:1:k %将最小的前k个距离排在最前面
ma=distance(ii);
label_ma=trainlabels(ii);
for j=ii+1:m
if distance(j)<ma
ma=distance(j);
label_ma=trainlabels (j);
tmp=j;
end
end
distance(tmp)=distance(ii); %排数据
distance(ii)=ma;
trainlabels(tmp)=trainlabels(ii); %排标号,主要使用标号
trainlabels(ii)=label_ma;
end
for ik=1:40; %统计一类中距离测试数据最近的个数
cls(ik)=0;
mm=find(trainlabels(1:k,:)==ik);
if mm~=0
cls(ik)=size(mm,1);
end
end
A=cell(1,40);
jk=1;
for ij=1:40
A{jk}=[cls(ij)];
jk=jk+1;
end
A=cell2mat(A);
[~,IX]=sort(A,'descend'); %将测试数据的类别归到前k个距离中含同类训练数据个数最多的一类中
testlabel(i)=IX(1);
IX(1);
end
aa=find(testlabel==testLabel'); %计算准确率
dd=size(aa,2)/m1
hold on;
plot(testLabel,'o');
plot(testlabel,'r*');
legend('期望输出','预测输出')
grid on;
</span></span>
KNN最近邻算法
最新推荐文章于 2022-05-11 13:14:52 发布