相似度、距离、最近邻分类器

本文介绍了如何通过编程实现向量间的欧氏距离和夹角余弦相似度计算,以及使用K最近邻算法进行分类。包括了具体的MATLAB函数实现,如dist_E和sim_COS,以及KNN_Classify_E函数,用于计算测试样本与训练样本的距离,并根据最近邻原则进行分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验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):
(将执行正确的代码粘贴在此处,核心代码要求有注释)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值