fitcsvm - Matlab的SVM分类器
在Matlab下使用SVM(支持向量机,support vector machine)分类器实现数据分类预测。
fitcsvm - Matlab的SVM分类器
1 构造SVM分类器
Matlab已经开始提示,推荐使用fitcsvm,且未来版本将删除 svmclassify。因此,本文介绍fitcsvm。
1.1 fitcsvm函数
使用fitcsvm函数即可构造 (construct) SVM分类器。
输入:
- 分类集数据
- 分类集标记
- 参数表
- 属性 key
- 参数 value
1 | svmClassifier = fitcsvm(TrainData',TrainLabels') |
TrainData
和TrainLabels
,是我分离出的训练集数据,此处做了矩阵转置,因为MatLab的fitcknn函数接收的参数是一行一条数据,一列一个特征维度的。- 具体地,
TrainData
是一个1024×1140 double的数据集,原始数据的结构是每列一条数据,每条数据有1024个特征(feature)。 TrainLabels
是一个1×1140 double的数据集,原始数据的结构是每列一个标记,与TrainData一一对应,实现标定。
- 具体地,
- 实际上,
fitcknn
将TrainLabels
识别为ClassNames
,也就是说,可以输入非数值型标记,只要区分出类别即可。 - 注意:
fitcsvm
只支持二分类!
输出:
- ClassificationSVM对象
1.2 运行实例
1 | >> svmClassifier = fitcsvm(TrainData',Labels) |
2 使用SVM分类器实现预测分类
2.1 predict函数
使用predict函数即可根据分类器,对输入的测试数据进行分类预测。
输入:
- 分类器 classifier
- 测试数据
1 | [labels, scores] = predict(svmClassifier{i}, TestData'); |
TestData(:,1:60)'
做了转置,使得一行一条数据,示例选取60条数据- 输出的cls是一个60条类信息的60×1维度矩阵
输出:
分类结果
- 维度,数据项数×1列
分数 score
The SVM classification score for classifying observation x is the signed distance from x to the decision boundary ranging from -∞ to +∞. A positive score for a class indicates that x is predicted to be in that class, a negative score indicates otherwise.
(Matlab Documentation)
- score 是输入点x到决策边界的有符号距离。也就是x(...)所在的高维度空间内,x点与分类超平面的有向距离。绝对值越大,说明离分类超平面越远,则更加属于对应类别。
2.2 运行实例
1 | >> [labels, scores] = predict(svmClassifier, TestData(:,1:5)') |
输出了1~5项数据的分类预测
- 在我的测试例中,实际上都是判定1~5条数据不属于第38个标定类。