加权K近邻是K近邻的一种修正,当理解K近邻之后,加权K近邻则很好理解了,不说了,上代码,
function label1=WKNN(training,testing,k)
[row, column]=size(training);
[row1, column1]=size(testing);
%计算测试集与训练集的距离
distance=[];
for i=1:row1
distance(i,:)=sum((repmat(testing(i,:),row,1)-training(:,1:(column-1))).^2, 2);
end
% 寻找加权K近邻
label=[];%存储距离测试样本最近的K个值
wight=[];%存储权重值
X=sort(distance,2);
for i=1:row1
[a,b]=sort(distance(i,:));
for j=1:k
label(i,j)=training(b(j),column);
wight(i,j)=X(i,j);
end
end
cl=zeros(1,100);
count=1;
cl(1,1)=training(1,column);%统计预测结果类型
for i=2:row
A=training(i,column);
flag=0;
for j=1:count
if cl(1,j) ==A
flag=1;
break;
end
end
if flag==0
count=count+1;
cl(1,count)=A;
end
end
end_count=zeros(row1,count);%统计某个结果出现的次数
for i=1:row1
for j=1:k
for l=1:count
if label(i,j)==cl(1,l)
end_count(i,l)=end_count(i,l)+wight(i,j).^-1;
end
end
end
end
label1=[];%统计预测结果
for i=1:row1
k=1;
num=end_count(i,1);
for j=2:count
if num<end_count(i,j)
k=j;
num=end_count(i,j);
end
end
label1(i)=cl(1,k);
end
end