matlab机器学习之knn算法实例
KNN(K-Nearest Neighbor)算法即K最邻近算法,是实现分类器中比较简单易懂的一种分类算法。
本片不讲算法原理,仅说明一下 matlab中使用该算法用的函数
详细参考:matlab官方文档
- 构造简单模型
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指定一个公式
- 使用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的值
- 默认交叉验证
使用默认的10倍交叉验证对KNN分类器进行交叉验证。
检查分类错误。
CVKNNMdl = crossval(Mdl);
classError = kfoldLoss(CVKNNMdl)
- 优化拟合的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算法实例相关推荐
- 机器学习之KNN算法原理
机器学习之KNN算法原理 1 KNN算法简介 2 算法思想 3 多种距离度量公式 ① 欧氏距离(Euclidean distance) ② 曼哈顿距离(Manhattan distance) ③ 闵式 ...
- 机器学习:KNN算法对鸢尾花进行分类
机器学习:KNN算法对鸢尾花进行分类 1.KNN算法的理解: 1.算法概述 KNN(K-NearestNeighbor)算法经常用来解决分类与回归问题, KNN算法的原理可以总结为"近朱者赤 ...
- 机器学习实战-KNN算法-20
机器学习实战-KNN算法-鸢尾花分类 # 导入算法包以及数据集 from sklearn import neighbors from sklearn import datasets from skle ...
- 用matlab做文字水印,3 一个用MATLAB编写的数字水印算法实例
3 一个用MATLAB编写的数字水印算法实例 为证明MATLAB的高效性与实现简便性,给出在Windows98环境下MATLAB5.3中调试通过的完整源程序. l 嵌入水印 %定义常量size=256 ...
- 机器学习之KNN算法
机器学习之KNN算法 1 KNN算法 2 预测电影类型例子 3 sklearn实现KNN算法 4 总结 前言:主要介绍KNN算法的基本原理,公式.sklearn实现knn算法,以及knn的优点缺点使用 ...
- 【机器学习】KNN算法实现手写板字迹识别
文章目录 [机器学习]KNN算法实现手写板字迹识别 1. 前言 2. 实验背景 3. 测试过程 3.1 手写板及测试数据的制作 3.2 加载训练数据并进行KNN模型搭建 3.3 结果预测 4. 总结 ...
- knn算法实例python_kNN算法及其Python实例
2017 September 10 kNN kNN算法及其Python实例 在2006年12月召开的 IEEE 数据挖掘国际会议上(ICDM, International Conference on ...
- 【机器学习】KNN算法代码练习
本课程是中国大学慕课<机器学习>的"KNN"章节的课后代码. 课程地址: https://www.icourse163.org/course/WZU-146409617 ...
- knn算法实例python_Python实现的knn算法示例
本文实例讲述了Python实现的knn算法.分享给大家供大家参考,具体如下: 代码参考机器学习实战那本书: 有兴趣你们可以去了解下 具体代码: # -*- coding:utf-8 -*- #! py ...
- Scikit-Learn机器学习(knn算法)
前言 博观而约取,厚积而薄发 本文中回忆了python的类概念,机器学习需要用到的环境,以及什么是Scikit-Learn 目的是方便博主进行回忆 记忆学习 和总结 如果能帮助到大家 那就更好了 Py ...
最新文章
- 11gR2RAC环境DBCA创建一个数据库错误ORA-15055 ORA-15001
- java 单机版_JAVA单机版管理系统源代码.pdf
- No space left on device错误解决
- 【PowerBi】Power Query 对数据进行合并查询
- linux 主目录 配置文件
- 再见了,余!额!宝!!!
- FPGA控制AD7768采集
- STL常用函数总结-stack
- 软件工程——HelloWorld
- 君正X1500基于Minios的crash分析
- WindRiver WorkBench创建、编译vxWorks APP工程
- 信安软考 第十四章 恶意代码防范技术原理
- ×××全功能邮件系统(3)
- 微信开启指纹支付显示java,微信找不到指纹支付怎么办?微信指纹支付怎么使用?...
- linux下显卡不工作,Ubuntu 12.04下升级Nvidia后Bumblebee无法工作解决
- 802.1Q帧的格式 与 VLAN的类型
- 功不唐捐——高兴的一天
- 【webpack5】webpack-dev-server 热更新不能自动刷新浏览器
- outlook服务器上修改文件保存,修改Outlook 2013数据文件(.ost)保存路径的方法
- 鸿蒙HarmonyOS版抖音(含源码)