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算法

你可能感兴趣的:(matlab,人工智能)