fitcknn - Matlab的kNN分类器
在Matlab下使用kNN (k近邻,k-Nearest Neighbor)分类器实现数据分类预测。
fitcknn - Matlab的kNN分类器
1 构造kNN分类器
1.1 fitcknn函数
使用fitcknn函数即可构造 (construct) kNN分类器。
输入:
- 分类集数据
- 分类集标记
- 参数表
- 属性 key
- 参数 value
1 | kNNClassifier = fitcknn(TrainData', TrainLabels', 'NumNeighbors', 1) |
TrainData
和TrainLabels
,是我分离出的训练集数据,此处做了矩阵转置,因为MatLab的fitcknn函数接收的参数是一行一条数据,一列一个特征维度的。- 具体地,
TrainData
是一个1024×1140 double的数据集,原始数据的结构是每列一条数据,每条数据有1024个特征(feature)。 TrainLabels
是一个1×1140 double的数据集,原始数据的结构是每列一个标记,与TrainData一一对应,实现标定。
- 具体地,
- 实际上,
fitcknn
将TrainLabels
识别为ClassNames
,也就是说,可以输入非数值型标记,只要区分出类别即可。
输出:
- ClassificationKNN对象
1.2 运行实例
1 | >> kNNClassifier = fitcknn(TrainData', TrainLabels', 'NumNeighbors', 1) |
- 此例设置
NumNeighbors
属性为1,即kNN的k值为1,取1近邻。
2 使用kNN分类器实现预测分类
2.1 predict函数
使用predict函数即可根据分类器,对输入的测试数据进行分类预测。
输入:
- 分类器 classifier
- 测试数据
1 | cls = predict(kNNClassifier, TestData(:,1:60)') |
TestData(:,1:60)'
做了转置,使得一行一条数据,示例选取60条数据- 输出的cls是一个60条类信息的60×1维度矩阵
输出:
- 分类结果
- 维度,数据项数×1列
2.2 运行实例
1 | >> cls = predict(kNNClassifier, TestData(:,1:60)') |
- 输出了60项数据的分类预测
- 可以看到,预测效果尚可,有一定的预测能力。
- 考虑到我是用了较高维度的数据(1024维),且仅做简单实验测试之用,k值限制在了1近邻,错误预测较多也在意料之中。