实验1 相似度、距离、最近邻分类器
一、实验目的
(1)理解相似度、距离的度量方式。
(2)理解最近邻分类器的工作原理。
二、实验内容
1、编程实现任意给定两个相同维度的向量之间的欧氏距离计算函数dist_E(x,y)。
输入:两个任意k维向量x和y,其中k的值随由数据决定。如x=[3,20,3.5], y=
[-3,34,7]。
测试代码如下:
x=[3,20,3.5]; y=[-3,34,7];
dist=dist_E(x,y);
(备注:代码粘贴在此处)
function [dist]=dist_E(v1,v2)
dist=[]
if(length(v1)~=length(v2))
disp('ÇëÊäÈ볤¶ÈÏàͬµÄ²ÎÊý');
else
temp=(v1-v2).*(v1-v2);
dist=sqrt(sum(temp));
end
2、编程实现任意给定两个相同维度的向量之间的夹角余弦相似度计算函数sim=sim_COS(x,y)。输入:两个任意k维向量x和y,其中k的值随由数据决定。
测试代码如下:
x=[3,20,3.5]; y=[-3,34,7];
sim=sim_COS(x,y);
(备注:代码粘贴在此处)
function [sim]=sim_COS(x,y)
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
sim=(dot(x,y)/(norm(x)*norm(y)))
end
3、训练数据见trainingData.mat,测试数据见testingData.mat。编程实现K最近邻算法。函数为:[class]=KNN_Classify_E(trainingSamples, trainingLabels, testingSample,k)。
测试代码如下:
load('testingData.mat');
load('trainingData.mat');
%[trAttr]=normalize(trAttr);
%[tstAttr]=normalize(tstAttr);
k=3;
predictlabel =zeros(length(tstLabels),1);
for i=1:length(tstLabels)
predictlabel(i) =KNN_Classify_E(trAttr, trLabels ,tstAttr(i,:) ,k);
end
accurate =sum(predictlabel==tstLabels)/length(tstLabels);
disp(accurate);
KNN_Classify_E函数的处理流程与说明如下:
函数[class]=KNN_Classify_E(trainingSamples, trainingLabels, testingSample,k):
(将执行正确的代码粘贴在此处,核心代码要求有注释)
function [class]=KNN_Classify_E(trainingSamples, trainingLabels, testingSample,k)
%UNTITLED3 Summary of this function goes here
% Detailed explanation goes here
[M,N]=size(trainingSamples);
Distance=zeros(M,1);
for i=1:M
tem=trainingSamples(i,:);
Distance(i)=dist_E(tem,testingSample);
[dis2,index]=sort(Distance);
end
labs=trainingLabels(index(1:k));
All_labs=unique(labs);
LabNum=length(All_labs);
Vote=zeros(LabNum);
for i=1: LabNum
Vote(i)=length(find(labs==All_labs(1)));
end
[max1,ind]=max(Vote);
class=All_labs(ind(1))
end
选做题:函数[Samples2]=normalize(Samples):
(将执行正确的代码粘贴在此处,核心代码要求有注释)