matlab机器学习之knn算法实例

更新时间:2023-05-11 20:06:21 阅读: 评论:0

matlab机器学习之knn算法实例
KNN(K-Nearest Neighbor)算法即K最邻近算法,是实现分类器中⽐较简单易懂的⼀种分类算法。
本⽚不讲算法原理,仅说明⼀下 matlab中使⽤该算法⽤的函数
详细参考:
1. 构造简单模型
Mdl =fitcknn(X,Y)
返回分类器模型对象,输⼊参数:X是训练数据,Y是标签。
mdl =fitcknn(Tbl,ResponVarName)
Tb1是⼀个table类型的数据,Tbl的每⼀⾏对应⼀个观察值,每⼀列对应⼀个预测变量。“ResponVarName”表⽰Tb1的最后⼀列表⽰标签。
如果Tbl包含响应变量,并且您想将Tbl中所有剩余的变量⽤作预测变量,则可以使⽤ResponVarName指定响应变量。
mdl =fitcknn(Tbl,Y)
如果不使⽤“ResponVarName”参数,那么默认Tb1只包含训练器要⽤到的数据,不包含标签,因此需要使⽤Y,存放着每个样本观察的标签
mdl =fitcknn(Tbl,formula)
使⽤formula来描述标签和属性变量的关系
如果Tbl包含响应变量,并且您只想将Tbl中其余变量的⼦集⽤作预测变量,则可以使⽤formula指定⼀个公式
2. 使⽤Minkowski指标训练k最近邻分类器
Train a 3-nearest neighbors classifier using the Minkowski metric. To u the Minkowski metric, you must u an exhaustive archer. 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的值
3. 默认交叉验证
使⽤默认的10倍交叉验证对KNN分类器进⾏交叉验证。
检查分类错误。
CVKNNMdl =crossval(Mdl);
classError =kfoldLoss(CVKNNMdl)
4. 优化拟合的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'

本文发布于:2023-05-11 20:06:21,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/884691.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:验证   数据   交叉   模型
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图