MATLAB机器学习方法之KNN

KNN算法具体步骤:

1、初始化距离为最大值

2、计算未知样本和每个训练样本的距离dist

3、得到目前k个最邻近样本中的最大距离

4、如果dist小于最大距离,则将该训练样本作为K近邻样本

5、统计k个最近邻样本中每个类别出现的次数

6、选择出现频率最大的类别作为未知样本的类别

MATLAB代码实现如下

%KNN

clear;clc;

K=4;%K值选择

trainData = [1,2.1;1.2,0.3;0.2,1.5;0.4,3.4;0.5,1.8;0.6,2.5];%训练样本六组数

trainClass = [1,1,2,2,3,3];%分类:

testData = [0.5,2.3];%测试样本一组

[N,M]=size(trainData);%计算出训练样本矩阵的行列数

%计算训练数据集与测试数据之间的欧氏距离dist

dist=zeros(N,1);

for i=1:N

dist(i,:)=norm(trainData(i,:)-testData);%dist数组储存距离%norm计算欧式距离

end

%将dist从小到大进行排序

[Y,I]=sort(dist,1); %I返回的是序号排序如本例中6 5 1 3 4 2

%将训练数据对应的类别与训练数据排序结果对应

trainClass=trainClass(I);

%确定前K个点所在类别的出现频率

classNum=length(unique(trainClass));%unique返回升序排列的数组中不同的数

labels=zeros(1,classNum);

for i=1:K

j=trainClass(i);

labels(j)=labels(j)+1;

end

%返回前K个点中出现频率最高的类别作为测试数据的预测分类

idx=max(labels);%确定最大值

for a=1:classNum%找出这个最大值

if(labels(a)==idx)

break;

end

end

fprintf('该测试数据属于类 %d\n',a);

%KNN算法

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值