KNN(K-Nearest Neighbor)算法即K最邻近算法,是实现分类器中比较简单易懂的一种分类算法。
本片不讲算法原理,仅说明一下 matlab中使用该算法用的函数
详细参考:matlab官方文档

  1. 构造简单模型
Mdl = fitcknn(X,Y)

返回分类器模型对象,输入参数:X是训练数据,Y是标签。

mdl = fitcknn(Tbl,ResponseVarName)

Tb1是一个table类型的数据,Tbl的每一行对应一个观察值,每一列对应一个预测变量。“ResponseVarName”表示Tb1的最后一列表示标签。
如果Tbl包含响应变量,并且您想将Tbl中所有剩余的变量用作预测变量,则可以使用ResponseVarName指定响应变量。

mdl = fitcknn(Tbl,Y)

如果不使用“ResponseVarName”参数,那么默认Tb1只包含训练器要用到的数据,不包含标签,因此需要使用Y,存放着每个样本观察的标签

mdl = fitcknn(Tbl,formula)

使用formula来描述标签和属性变量的关系
如果Tbl包含响应变量,并且您只想将Tbl中其余变量的子集用作预测变量,则可以使用formula指定一个公式

  1. 使用Minkowski指标训练k最近邻分类器

Train a 3-nearest neighbors classifier using the Minkowski metric. To use the Minkowski metric, you must use an exhaustive searcher. It is good practice to standardize noncategorical predictor data.
使用Minkowski度量训练3个最近邻居分类器。要使用Minkowski指标,必须使用穷举搜索器。优良作法是标准化非分类预测变量数据。

Mdl = fitcknn(X,Y,'NumNeighbors',3,...'NSMethod','exhaustive','Distance','minkowski',...'Standardize',1);

运行上述代码后—Mdl的值

  1. 默认交叉验证
    使用默认的10倍交叉验证对KNN分类器进行交叉验证。
    检查分类错误。
CVKNNMdl = crossval(Mdl);
classError = kfoldLoss(CVKNNMdl)
  1. 优化拟合的KNN分类器
    使用fitcknn自动优化超参数
    通过使用自动超参数优化,找到使交叉验证损失减少五倍的超参数。 为了获得可重现性,请设置随机种子并使用“ expected-improvement-plus”获取功能。
Mdl = fitcknn(X,Y,'OptimizeHyperparameters','auto',...'HyperparameterOptimizationOptions',...struct('AcquisitionFunctionName','expected-improvement-plus'))

运行后效果

找到最优的近邻数NumNeighbors和距离指标参数Distance

一个简单的预测方法:

%X是训练数据,Y是标签,Z是要预测的数据  代码里缺少具体数据
%采用自动优化参数 获得最优的近邻数NumNeighbors和距离指标参数Distance
%但运行速度较慢  获得最优参数后,可更改代码 直接赋值
%若要判断数据集的准确率 设计num计数 Mdl = fitcknn(X,Y,'OptimizeHyperparameters','auto',...'HyperparameterOptimizationOptions',...struct('AcquisitionFunctionName','expected-improvement-plus')) ;Predict_labels = predict(Mdl,Z); %预测Z的类别% 计算交叉验证损失,采用默认形式,可以作为模型的指标,越小模型越好。
CVMdl = crossval(Mdl);
kloss = kfoldLoss(CVMdl);

5. 交叉验证选项

①’CrossVal’-交叉验证标志
交叉验证标志,指定为由“ Crossval”和“ on”或“ off”组成的逗号分隔对。 如果指定“ on”,则该软件将执行10倍交叉验证。
Example: 'CrossVal','on'

②’CVPartition’—交叉验证分区
要创建交叉验证的模型,您只能使用以下四个名称/值对参数之一:CVPartition,Holdout,KFold或Leaveout。

示例:假设您使用 cvp = cvpartition(500,'KFold',5) 为500个观测值创建5倍交叉验证的随机分区。然后,您可以使用 'CVPartition',cvp 指定交叉验证的模型。

③’Holdout’-保留验证的数据部分
标量值范围(0,1)
用于保持验证的数据的分数,指定为逗号分隔的一对,由“保持”和范围在(0,1)之间的标量值组成。如果指定“ Holdout”,p,则软件将完成以下步骤:
1).随机选择并保留100%的数据作为验证数据,并使用其余数据训练模型。
2)将紧凑的,经过训练的模型存储在交叉验证模型的Trained属性中。
Example: 'Holdout',0.1

④’KFold’ — 折叠数
10(默认)|正整数值大于1
Example: 'KFold',5

⑤’Leaveout’-Leave-one-out交叉验证标志
留出交叉验证标志,指定为以逗号分隔的一对,由“ Leaveout”和“ on”或“ off”组成
作用:将观测值保留为验证数据,并使用其他n-1个观测值训练模型。将n个紧凑的,经过训练的模型存储在交叉验证模型的Trained属性中的n×1单元向量的单元格中。
Example: 'Leaveout','on'

matlab机器学习之knn算法实例相关推荐

  1. 机器学习之KNN算法原理

    机器学习之KNN算法原理 1 KNN算法简介 2 算法思想 3 多种距离度量公式 ① 欧氏距离(Euclidean distance) ② 曼哈顿距离(Manhattan distance) ③ 闵式 ...

  2. 机器学习:KNN算法对鸢尾花进行分类

    机器学习:KNN算法对鸢尾花进行分类 1.KNN算法的理解: 1.算法概述 KNN(K-NearestNeighbor)算法经常用来解决分类与回归问题, KNN算法的原理可以总结为"近朱者赤 ...

  3. 机器学习实战-KNN算法-20

    机器学习实战-KNN算法-鸢尾花分类 # 导入算法包以及数据集 from sklearn import neighbors from sklearn import datasets from skle ...

  4. 用matlab做文字水印,3 一个用MATLAB编写的数字水印算法实例

    3 一个用MATLAB编写的数字水印算法实例 为证明MATLAB的高效性与实现简便性,给出在Windows98环境下MATLAB5.3中调试通过的完整源程序. l 嵌入水印 %定义常量size=256 ...

  5. 机器学习之KNN算法

    机器学习之KNN算法 1 KNN算法 2 预测电影类型例子 3 sklearn实现KNN算法 4 总结 前言:主要介绍KNN算法的基本原理,公式.sklearn实现knn算法,以及knn的优点缺点使用 ...

  6. 【机器学习】KNN算法实现手写板字迹识别

    文章目录 [机器学习]KNN算法实现手写板字迹识别 1. 前言 2. 实验背景 3. 测试过程 3.1 手写板及测试数据的制作 3.2 加载训练数据并进行KNN模型搭建 3.3 结果预测 4. 总结 ...

  7. knn算法实例python_kNN算法及其Python实例

    2017 September 10 kNN kNN算法及其Python实例 在2006年12月召开的 IEEE 数据挖掘国际会议上(ICDM, International Conference on ...

  8. 【机器学习】KNN算法代码练习

    本课程是中国大学慕课<机器学习>的"KNN"章节的课后代码. 课程地址: https://www.icourse163.org/course/WZU-146409617 ...

  9. knn算法实例python_Python实现的knn算法示例

    本文实例讲述了Python实现的knn算法.分享给大家供大家参考,具体如下: 代码参考机器学习实战那本书: 有兴趣你们可以去了解下 具体代码: # -*- coding:utf-8 -*- #! py ...

  10. Scikit-Learn机器学习(knn算法)

    前言 博观而约取,厚积而薄发 本文中回忆了python的类概念,机器学习需要用到的环境,以及什么是Scikit-Learn 目的是方便博主进行回忆 记忆学习 和总结 如果能帮助到大家 那就更好了 Py ...

最新文章

  1. 11gR2RAC环境DBCA创建一个数据库错误ORA-15055 ORA-15001
  2. java 单机版_JAVA单机版管理系统源代码.pdf
  3. No space left on device错误解决
  4. 【PowerBi】Power Query 对数据进行合并查询
  5. linux 主目录 配置文件
  6. 再见了,余!额!宝!!!
  7. FPGA控制AD7768采集
  8. STL常用函数总结-stack
  9. 软件工程——HelloWorld
  10. 君正X1500基于Minios的crash分析
  11. WindRiver WorkBench创建、编译vxWorks APP工程
  12. 信安软考 第十四章 恶意代码防范技术原理
  13. ×××全功能邮件系统(3)
  14. 微信开启指纹支付显示java,微信找不到指纹支付怎么办?微信指纹支付怎么使用?...
  15. linux下显卡不工作,Ubuntu 12.04下升级Nvidia后Bumblebee无法工作解决
  16. 802.1Q帧的格式 与 VLAN的类型
  17. 功不唐捐——高兴的一天
  18. 【webpack5】webpack-dev-server 热更新不能自动刷新浏览器
  19. outlook服务器上修改文件保存,修改Outlook 2013数据文件(.ost)保存路径的方法
  20. 鸿蒙HarmonyOS版抖音(含源码)

热门文章

  1. (8)USB协议 —— 高速模式握手过程
  2. 了解工作分解结构(WBS)
  3. 回调函数及其应用案例
  4. golang c10k问题
  5. 等级保护--云计算安全扩展要求
  6. B2C电商产品系统分析
  7. java将pdf,word,excel转成图片
  8. Day605.Bean生命周期错误问题 -Spring编程常见错误
  9. 使用Tesseract-OCR识别图片中的文字并生成双层PDF
  10. 开源一个cmpp协议转http协议项目