Matlab:k-近邻法分类

发布时间:2023年12月28日

k-近邻法是一种常用的分类算法。它基于实例之间的相似性度量进行分类,即将未知样本的类别标记为其k个最近邻居中最常见的类别。

1、基础

大概步骤:

1.准备数据:首先,需要准备训练数据集。训练数据集由特征向量和相应的类别标签组成。

2.创建模型:使用fitcknn函数创建分类模型。可以指定K值(最近邻居的数量)以及其他参数。

3.训练模型:使用训练数据集来训练模型。这将根据特征向量和类别标签之间的关系构建模型。

4.准备测试数据:准备包含待分类样本的测试数据集。

5.进行分类预测:使用已训练的模型对测试数据进行分类预测。可以使用predict函数来获取预测结果。

6.分类结果评估:对于有已知类别标签的测试数据,可以计算模型的准确率或其他评估指标来评估分类结果的质量。

例:

% 一组训练数据,包含两个特征和相应的类标签
X_train = [1,2; 2,4; 3,6;  1,4; 2,8; 3,12;  3,1; 5,3; 7,4];
Y_train = ['A'; 'A'; 'A';  'B'; 'B'; 'B';   'C'; 'C'; 'C'];

% 创建k-近邻模型
k = 2;   % 设置k值
mdl = fitcknn(X_train, Y_train, 'NumNeighbors', k);

% 准备测试数据
% 一组测试数据,包含两个特征
X_test = [1.35, 2.7; 6, 4; 3, 13];

% 步骤4:使用k-近邻模型进行分类
Y_pred = predict(mdl, X_test);

% 显示预测结果
disp(Y_pred)

运行结果:

2、+可视化

clear,close all;
N=200;                              %生成样本数量为200个
X = [randn(N,2)+2*ones(N,2);...
     randn(N,2)-2*ones(N,2);];      
%生成两个高斯分布数据集,并将它们合并在一起,形成一个2N行2列的矩阵X
%其中前N行代表第一类样本,后N行代表第二类样本

% ====================================================================
fig=figure;                               %创建一个新的图窗
plot(X(1:N,1),X(1:N,2),'r.')              %绘制第一类样本的散点图
hold on,                %保持当前图窗,使得后续绘制的图形不会覆盖已有的图形
plot(X(N+1:2*N,1),X(N+1:2*N,2),'b.')      %绘制第二类样本的散点图
title('初始样本分布图'),                   %给图像添加标题
axis([-10,10,-10,10])                     %设置坐标轴的范围
% ====================================================================

x=randn(1,2);                             %生成一个待分类的样本
hold on,                %保持当前图窗,使得后续绘制的图形不会覆盖已有的图形                               
plot(x(1),x(2),'m+','MarkerSize',10,'LineWidth',2)%在图上添加一个十字标记,表示待分类的样本
for i=1:2*N                    %对每个样本计算它与待分类样本之间的距离并存储在数组dist中
    dist(i)=norm(x-X(i,:));    %计算待分类样本与第i个样本之间的欧氏距离
end
[Sdist,index]=sort(dist,'ascend');%对所有距离按照从小到大的顺序排序,并返回排序后的距离值和对应的索引
K=5;                    %设置近邻数目K,表示取K个近邻作为分类依据 
for i=1:K         %对前K个距离最小的样本,在图上标记出来
    hold on,
    plot(X(index(i),1),X(index(i),2),'ko');%在图上用黑色圆圈标记第index(i)个样本
end
legend('Cluster 1','Cluster 2','x','Location','NW')%添加图例,说明各个标记的含义
flag1=0;    %初始化第一类近邻数目为0
flag2=0;    %初始化第二类近邻数目为0
%统计前K个近邻中第一类样本和第二类样本的数目
for i=1:K       
    if ceil(index(i)/N)==1 %如果第index(i)个样本属于第一类,则将第一类近邻数目加1
        flag1=flag1+1;
    elseif ceil(index(i)/N)==2
        flag2=flag2+1;
    end
end
disp(strcat('K近邻中包含',num2str(flag1),'个第一类样本'));%显示在前K个近邻中有几个是第一类样本
disp(strcat('K近邻中包含',num2str(flag2),'个第二类样本'));%显示在前K个近邻中有几个是第二类样本
if flag1>flag2          %如果第一类近邻数目多于第二类近邻数目,则判断待分类的样本属于第一类
    disp('判断待判样本属于第一类');
else
    disp('判断待判样本属于第二类');
end

基础知识与数值计算https://blog.csdn.net/weixin_73011353/article/details/131491987?spm=1001.2014.3001.5502icon-default.png?t=N7T8https://blog.csdn.net/weixin_73011353/article/details/131491987?spm=1001.2014.3001.5502

图形处理与可视化

Matlab图形处理与可视化_matlab实验三图形的可视化及修饰处理-CSDN博客文章浏览阅读92次。colorbar:该函数将在当前的图型中显示颜色标尺,用来反应当前使用的颜色映像,并且以此反映图形中数据的相对大小。完成对颜色映像的定义后,用户就可以调用所定义的颜色映像,具体的有pcolor、rgbplot及colorbar等函数。pcolor:函数pcolor为伪色函数,即不是真正的颜色,而是通过颜色的不同来反应相应的数值的大小。坐标轴的控制函数:axis ([xmin, xmax, ymin, ymax])rgbplot:函数rgbplot是一种直接显示颜色的函数。2、plot函数有两个输入变量时。_matlab实验三图形的可视化及修饰处理https://blog.csdn.net/weixin_73011353/article/details/131491987?spm=1001.2014.3001.5502

文章来源:https://blog.csdn.net/weixin_73011353/article/details/135250053
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。