KNN分类——matlab(转载)

2023-11-16

KNN分类——matlab

(adsbygoogle = window.adsbygoogle || []).push({});

K-最近邻分类方法(KNN,k-nearest-neighbor classifier)是一种惰性学习法,所谓惰性就是KNN不像一些算法(比如SVM)一样在接收待分类数据前就已经根据训练数据构造好了分类模型,而是会在接受到训练数据后,只是对训练数据进行简单的存储,并不构造分类模型,在接受到待分类数据时,KNN通过计算待分类数据X与所有训练数据之间的距离,选择前K个距离X最近的数据,并将这K个距离最近的数据中出现次数最多的类属性赋给X。如下图所示,判断图中待分类数据绿色圆点的分类情况:
这里写图片描述
当K取3时,此时离待分类数据绿色圆点最近的5个数据中,包含2个红色三角和1个蓝色四边形,出现次数多的红色三角的类属性将会赋给此待分类数据。
当K取5时,此时离待分类数据绿色圆点最近的5个数据中,仍包含2个红色三角,但是蓝色四边形数目增加到3个,3>2,所以,出现次数多的蓝色四边形的类属性将会赋给此待分类数据。

knnclassify函数
在matlab中,关于KNN分类的函数为knnclassify,Class=knnclassify(Sample,Training,Group,k,distance,rule),其中输入参数分别为
1、Sample:待分类数据,其列数(特征数)要与训练数据相同。
2、Training:训练数据,M*N,M(行)为数据个数,N(列)为特征数。
3、Group:训练数据所对应的类属性。
4、k:分类中,最近邻的个数,默认为1.
5、distance:计算数据间距离的方法,有以下几种选择:
(1)euclidean:欧几里得距离(默认值)
(2)cityblock:曼哈顿(或城市块)距离
(3)cosine:余弦距离
(4)correlation:相关距离
(5)hamming:海明距离
这些距离方式实际上是采用不同的函数来计算两个数据对象之间的距离,例如:
对于两个被p个特征描述的数据对象 i=(Xi1,Xi2,……,Xip)和j=(Xj1,Xj2,……,Xjp),他们的欧几里得距离为:

d(i,j)=(Xi1Xj1)2+(Xi2Xj2)2+......+(XipXjp)2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√

他们的曼哈顿(或城市块)距离为:
d(i,j)=|Xi1Xj1|+|Xi2Xj2|+......+|XipXjp|

6、rule:确定类属性的规则,有以下几种选择:
(1) nearest : 最近的K个的最多数(默认值)
(2) random : 随机的最多数
(3) consensus: 投票法
测试实验
(1)选取k=1,diatance=’cityblock’,rule=’nearest’

function [ classfication ] = KNN2_1( train,test )
%使用matlab自带的关于花的数据进行二分类实验(150*4),其中,每一行代表一朵花,
%共有150行(朵),每一朵包含4个属性值(特征),即4列。且每1-5051-100
%101-150数据分别为同一类,分别为setosa青风藤类,versicolor云芝类,virginica锦葵类

load fisheriris                       %下载数据包含:meas(150*4花特征数据)
                                  %和species(150*1 花的类属性数据) 

meas=meas(1:100,1:2)                    %选取前两类前两个属性进行分类 
train=[(meas(1:40,:));(meas(51:90,:))]; %选取数据中每类对应的前40个作为训练数据
test=[(meas(41:50,:));(meas(91:100,:))];%选取数据中每类对应的后10个作为测试数据
trainGroup=[ones(1,40),2*ones(1,40)]';       %类属性设置为1,2
testGroup=[ones(1,10),2*ones(1,10)]';

%KNN分类
class=knnclassify(test,train,trainGroup,1,'cityblock','nearest');
%用plot显示出测试数据分类结果
testGroup=[ones(1,10),2*ones(1,10)]'; 
figure;
hold on;
plot(testGroup,'o');
plot(class,'*');
legend('测试集正确分类','KNN分类结果');
disp(class);
%计算分类测试的准确率
%正确的分类情况为testGroup,实验测试获得的分类情况为class

%计算分类精度
count=0;
for i=(1:20)
   if class(i)==testGroup(i)
      count=count+1;
   end
end
fprintf('分类精度为:%f\n' ,count/20);

end

实验结果
这里写图片描述
这里写图片描述

当改变knnclassify函数参数为:k=5,distance=’euclidean’,rule=’nearest’时,获得的实验结果如下图:
这里写图片描述
这里写图片描述
主要存在的问题
KNN分类法最大的优点是思想简单,容易理解,并且不需要训练分类模型,同时,对于多分类问题,KNN分类较其他方法也更简单,还是一样的根据距离来判断。
虽然KNN不需要训练模型,但其在对数据分类时的计算量却很大,因为每一个待分类的数据与训练数据的距离都要计算,并且当训练数据中各类别数据的个数差距较大时,在类别判定时,由于某类的数据个数太多,在总体训练数据中分布比较密集,对于一个待分类的数据来说,在它的K个最近邻居中,数据个数多的类别更容易占优势,从而影响了分类结果。再有就是K值得选择问题,如果K值太小,得到的最近邻数据太少,对分类精度会有影响,如果K值太大,那么像上面所说的‘各类别数据个数差距较大而影响分类结果’的问题就会被放大。
改进 (1)对于计算量大的问题,我们可以通过减少特征个数,只选择部分区别性能强的特征来作为分类数据的特征值,再有就是由于计算距离时,需要计算待分类数据与所有训练数据的距离,我们还可以减少训练数据的数量,只保留部分与分类相关较大的训练数据。 (2)再有就是在计算距离时,通过对不同的特征设置不同的权重值,对不同距离的邻居设置不同的权重值的方法来改进KNN方法中所有特征对距离的作用相同的缺陷以及不同距离的邻居对类别的判定作用相同的缺陷。 (3)K值得选择,很大程度影响分类的效果,可以采用交叉检验来确定K值。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KNN分类——matlab(转载) 的相关文章

  • 将此 MATLAB 代码转换为 Python 时我做错了什么?

    我正在努力将生成波形的 MATLAB 代码转换为 Python 就上下文而言 这是原子力显微镜带激发响应的模拟 与代码错误无关 在 MATLAB 中从 r vec 生成的图形与我在 Python 中生成的图形不同 我是否正确地将 MATLA
  • 在 Excel 中打印 MATLAB 图窗并调整其大小

    我在 MATLAB 中有两个带有手柄的图形hFig1 and hFig2 我想将它们打印到 Excel 中的特定单元格 单元格 E3 和 I3 并将它们重新调整为 2 英寸 x 3 英寸 我尝试过使用 AddPictures对象处理程序和使
  • Matlab:掩码/创建一个知道其原点且具有一定半径的圆形 roi

    只是一个简单的问题 我有一张图像 并且提取了某个点 特征 我知道每个帧中该点的坐标 说 x1 和 y1 我需要一个圆形 ROI 形式 该点在图像上具有我选择的半径 我尝试了 impoly 和 roipoly 当我知道图像中的要点时 不知道如
  • 计算数组中接下来的 n 个元素的乘积

    我想计算下一个的乘积n矩阵的相邻元素 号码n要相乘的元素数应在函数的输入中给出 例如 对于此输入 我应该从第一个开始计算每 3 个连续元素的乘积 p ind max product 1 2 2 1 3 1 3 这给出了 1 2 2 2 2
  • knn-相同的k,不同的结果

    我有一个矩阵ZZ 我跑完之后prcomp并选择了我收到的前 5 台电脑data new P prcomp zz data new P x 1 5 然后我分成训练集和测试集 pca train data new 1 121 pca test
  • Matlab PARFOR 循环可以通过编程方式打开/关闭吗?

    有一个关于 MATLAB 中 parfor 的简单问题 我想在程序中设置一个标志 以便在 parfor 和常规 for 循环之间进行更改 基本上 我需要此功能 以便我的代码的某些部分可以在 调试 模式下更新图形 然后当关闭该标志时 使用 p
  • Matlab - 如果值包含xxx,则删除元胞数组中的行

    在 Matlab 中 如何删除包含变量字符串的元胞数组中的元胞 假设我的元胞数组是 C svnTrunk RadarLib radarlb utilities scatteredInterpolant m C svnTrunk RadarL
  • 在 matlab 中求 3d 峰的体积

    现在我有一个带有峰值的 3D 散点图 我需要找到其体积 我的数据来自图像 因此 x 和 y 值表示 xy 平面上的像素位置 z 值是每个像素的像素值 这是我的散点图 scatter3 x y z 20 z filled 我试图找到数据峰值的
  • 在 MATLAB 中重命名文件

    我正在尝试以编程方式重命名工作目录中的文件a temp txt to b hello txt 您建议如何这样做 MATLAB中有一个简单的文件重命名函数吗 我认为您正在寻找 MOVEFILE
  • 如何在没有安装Visual Studio的另一台机器上使用Visual Studio生成的dll?

    我已经在 Visual Studio 2012 中生成了动态库 我想在另一台机器上使用该库 但我不想在远程机器上安装 Visual Studio 我有 mex 库和 dll 我想运行一个使用这两个库的脚本 当我运行脚本时 出现以下错误 缺少
  • MATLAB 特征函数

    我很好奇哪里可以找到完整的描述FEATURE功能 它接受哪些论点 没有找到文档 我只听说过memstats and getpid 还要别的吗 gt gt which feature built in undocumented 注意 更完整的
  • 在 R 中使用 k-NN 和分类值

    我希望对主要具有分类特征的数据进行分类 为此 欧几里得距离 或任何其他数值假设距离 不适合 我正在寻找 R 的 kNN 实现 其中可以选择不同的距离方法 例如汉明距离 有没有一种方法可以使用常见的 kNN 实现 例如具有不同距离度量函数的
  • 使用符号求解器仅求解某些变量

    我正在尝试在 MATLAB 中求解包含 3 个变量和 5 个常量的方程组 是否可以使用solve求解三个变量 同时保持常量为符号而不用数值替换它们 当您使用SOLVE http www mathworks com access helpde
  • 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

    现在 MATLAB 2012a 中的 mex 仅正式支持 gcc 4 4 6 但我想使用 gcc 4 7 风险自负 现在如果我直接用 mex 编译一些东西 它会抱怨 usr lib gcc i686 linux gnu 4 7 cc1plu
  • matlab中的排列函数是如何工作的

    这是一个有点愚蠢的问题 但我似乎无法弄清楚排列在 matlab 中是如何工作的 以文档为例 A 1 2 3 4 permute A 2 1 ans 1 3 2 4 到底是怎么回事 这如何告诉 matlab 3 和 2 需要交换 哇 这是我迄
  • 如何使用 MATLAB 的 substruct 函数创建表示使用“end”的引用的结构?

    我想使用substruct http www mathworks com help matlab ref substruct html函数创建一个结构体以供使用subsref 目的是使用索引字符串subsref而不是通常的 符号 因为我正在
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • 如何在 MATLAB 中绘制 3D 曲面图?

    我有一个像这样的数据集 0 1 0 2 0 3 0 4 1 10 11 12 13 2 11 12 13 14 3 12 13 14 15 4 13 14 15 16 我想在 matlab 中绘制 3D 曲面图 使列标题位于 y 轴 行标题
  • 在matlab中绘制给定区域内(两个圆之间)的向量场

    我想在 Matlab 中绘制下面的向量场 u cos x x 0 y y 0 v sin x x 0 y y 0 我可以在网格中轻松完成 例如 x 和 y 方向从 2 到 2 x 0 2 y 0 1 x y meshgrid 2 0 2 2
  • 图像处理 - 使用 opencv 进行服装分割

    我正在使用 opencv 进行服装特征识别 第一步 我需要通过从图像中移除脸部和手来分割 T 恤 任何建议表示赞赏 我建议采用以下方法 Use 阿德里安 罗斯布鲁克的用于检测皮肤的皮肤检测算法 谢谢罗莎 格隆奇以获得他的评论 在方差图上使用

随机推荐

  • Flink Web UI 介绍

    一 提交flink任务到yarn flink run m yarn cluster yn 1 p 2 yjm 1024 ytm 1024 ynm FlinkOnYarnSession MemberLogInfoProducer d c co
  • 金蝶生成凭证模板_金蝶精斗云产品的优势

    1 金蝶精斗云产品免维护安装 产品免安装 免维护 免年结 自动升级 账号式授权加密 自动备份 会计归档 不需要固定的服务器 e64845f06572190e4634c2be37ab9ee9 png 2 金蝶精斗云系统凭证便捷生成 图片 PD
  • 反接保护电路:

    反接保护电路 通常我们的电子产品 为防止用户将正负极接反 会对接口做防反接保护 比如接口做成梯形或者开个缺口 反了不容易插进 但你真的永远不知道你的产品用户是萌妹纸还是暴力怪蜀黍 最终 这些防接反设计还是被突破了 被暴力插了进去 插进去了
  • uboot联网以及uboot重启问题

    一 配置uboot联网 虚拟机联网 配置uboot联网 1 配置uboot环境变量 setenv ipaddr 192 168 10 50 开发板ip地址 setenv ethaddr 00 04 9f 04 d2 35 mcu期间地址 多
  • ESP8266 CUT HERE FOR EXCEPTION DECODER解决办法

    串口log信息 CUT HERE FOR EXCEPTION DECODER Soft WDT reset gt gt gt stack gt gt gt ctx cont sp 3ffffd40 end 3fffffc0 offset 0
  • java使用多线程同时插入数据库数据例子

    今天自己在家准备面试内容 写了个java使用多线程往mysql数据库插入数据的例子 总结 不管数据库引擎是MYISAM还是InnoDB 情况都是 没有线程池的情况下就不说了 一直创建数据库连接一会就出错了 基本对于上万条的数据插入不可用 使
  • vue2的响应式

    结合源码分析一下vue的响应式 之前对于响应式 只是简单 很表面上的认识 知道vue的响应式主要通过Object defineProperty 方法来进行数据劫持以及发布者 订阅模式来实现的 但是如何进行数据劫持呢 发布订阅者模式又是什么呢
  • 安装pygame

    在学习了一个学期的python之后 我决定对pygame下手了 首先要安装pygame 对于一个计算机小白 安装的过程就比较的痛苦 但是怎么说 查阅了各方资料 好歹是安装完毕 预备条件 win10 python3 9 7 打开cmd win
  • 【vue2】按需引入多个组件的写法

    可以使用component标签 is 组件名 dialogTitle dialogTitle 和 rowInfo offlineRow 就是父给子传值的写法
  • 汽车雷达-综述

    目录 1 简介 2 发展史 3 技术参数 4 采用SIGe毫米波T R组件 5 汽车雷达中主要的信号处理单元 5 1 远程雷达 5 1 1 总体框图 5 1 2 FFT 5 1 3 DOA估计 5 1 3 1 和差测角 5 1 3 2 顺序
  • 多种排序算法(插入、二分法【查找、排序】、选择、冒泡、快速、希尔)

    多种排序算法 插入 二分法 查找 排序 选择 冒泡 快速 希尔 插入排序 function insertSort arr var len arr length for var i 1 i lt len i var key arr i var
  • 用户行为预测论文summay

    用户行为预测论文summary 1 论文名称 Modelingand Predicting Behavioral Dynamics on the Web 2 论文作者 KiraRadinskyz Krysta Svorey 3 主要内容 本
  • 论文阅读--Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

    多人姿态估计的挑战 1 人数 位置和尺寸的大小未知 2 人体之间的相互接触 遮挡造成干扰 3 复杂度随着实时人数的增加而提升 姿态估计方法 1 top down approaches 自顶向下 借助现有的用于单人姿势判断的技术 先检测人 然
  • 趣味算法:探索栈和队列的神秘之旅

    文章目录 前言 一 栈和队列 从历史到理论 二 栈和队列 实际例子和代码 1 栈在后缀表达式求解中的应用 2 队列在打印任务调度中的应用 三 栈和队列 更多的应用场景 四 栈和队列 如何选择 五 栈和队列的变体 六 性能分析 结语 前言 编
  • spring boot 统一JSON格式的接口返回结果

    前后端分离的项目开发前 会提前规定好数据返回格式 本文以JSON为例 第一步 定义好JavaBean package com yclouds myhelper web response import com fasterxml jackso
  • 输入商品数量和单价,计算商品总额。(C语言)

    代码 define CRT SECURE NO WARNINGS 1 include
  • 【PyTorch】使用 Mac GPUs (Apple silicon GPUs) 训练模型

    根据 PyTorch 官网的文章 Introducing Accelerated PyTorch Training on Mac1 从 PyTorch v1 12 release 开始支持使用 Apple silicon GPUs 加速训练
  • ML-熵、条件熵、信息增益

    通俗理解条件熵 特征选择之信息增益法 必看 系统介绍了熵 条件熵 信息增益的概念及推导 条件熵的计算 必看 知乎前三个回答都看一下 有关于熵 条件熵 信息增益的实践 我通过例子一步一步讲解这个概念 在决策树算法的学习过程中 信息增益是特征选
  • stm32实现网页服务器,STM32实现Web服务器

    实例简介 有例程及详细的讲解 适用于初学嵌入式WebServer的同学下载 实例截图 核心代码 ourdev 682501O2PDF8 10M以太网 WEB服务器 源码 PDF教程 以太网ENC28J60 pdf 以太网ENC28J60源码
  • KNN分类——matlab(转载)

    KNN分类 matlab 时间 2016 09 06 标签 matlab knn算法 算法 栏目 MATLAB 原文 http blog csdn net lwwangfang article details 52452429 adsbyg