对于组合二元支持向量机模型的多类学习,使用纠错输出码(ECOC,error-correcting output codes )。有关详细信息,请参阅fitcecoc。 ECOC 可以用来将 Multiclass Learning 问题转化为 Binary Classification 问题。
以下内容基于MATLAB官网的介绍文档,进行了一点个人的理解和整理,不算原创,但也不是单纯的翻译。一年的博客写作生涯,随着博士生涯进入正轨,我写博客的动力也变了,原来是纯粹为了分享和成长,想写的方法就学一学写一写。现在不行了,搞科研的方法太多了,能让人皓首穷经,慢慢地,我就变成了没有需求就没有学习的的动力。用不到的方法就不想去学了,python的学习就是这样放下的。SVM也是,这里就开个头吧,不知道以后还有没有机会深入学习,拿出来哪怕一个月的时间,从头到尾地学习。现在这篇博客里的内容缺斤少两的,想看具体的英文内容请点击链接fitcecoc。
MATLAB实现SVM多分类
- 纠错输出码(ECOC)相关网页
- 官网的例子
- Train Multiclass Model Using SVM Learners
- Train Multiclass Linear Classification Model
- Cross-Validate ECOC Classifier
- Estimate Posterior Probabilities Using ECOC Classifier
- Speed Up Training ECOC Classifiers Using Binning and Parallel Computing
- Optimize ECOC Classifier
- Train Multiclass ECOC Model with SVMs and Tall Arrays
- 其他
纠错输出码(ECOC)相关网页
https://www.deeplearn.me/587.html
https://blog.csdn.net/u010945683/article/details/52743515
官网的例子
Train Multiclass Model Using SVM Learners
使用支持向量机(SVM)二进制学习器训练多类纠错输出代码(ECOC)模型。
% 导入数据,Y中含有三类标签
load fisheriris
X = meas;
Y = species;
% 使用默认选项训练多类ECOC模型。
% Mdl是ECOC多分类模型,默认情况下,fitcecoc使用SVM二进制学习器和一对一编码设计,可以使用点表示法访问Mdl属性。
Mdl = fitcecoc(X,Y)
% 显示类名称和编码设计矩阵。
% 三个类的一对一编码设计产生三个二进制学习器。CodingMat的列对应于学习器,行对应于类。
% 类顺序与Mdl.ClassNames类中的顺序相同
% 例如,CodingMat(:,1)为[1;–1;0],表示matlab使用分类为"setosa"和"versicolor"的所有观测值训练第一个支持向量机二进制学习者。
% 因为'setosa'对应于1,所以它是正类;'versicolor'对应于-1,所以它是负类。
Mdl.ClassNames
CodingMat = Mdl.CodingMatrix
% 使用单元格索引和点表示法访问每个二进制学习器。
Mdl.BinaryLearners{1} % The first binary learner
% 计算替换类别错误。 训练数据的分类误差很小,但是分类器可能是过拟合模型。 可以使用crossval对分类器进行交叉验证,并计算交叉验证分类错误。
error = resubLoss(Mdl)
Train Multiclass Linear Classification Model
训练由多个二进制,线性分类模型组成的ECOC模型。
% 导入数据
load nlpdata
% X是预测数据的稀疏矩阵,Y是类标签的分类向量。数据中有两个以上的类。
% 创建默认的线性分类模型模板。
t = templateLinear();
% 训练由多个二进制,线性分类模型组成的ECOC模型,这些模型可以根据文档网页上单词的频率分布来识别产品。
% 为了缩短训练时间,请转置预测数据,并指定观察值对应于列。
X = X';
rng(1); % For reproducibility
Mdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns')
Cross-Validate ECOC Classifier
使用SVM二进制学习器对ECOC分类器进行交叉验证,并估计分类错误。
% 交叉验证ECOC分类器
% 加载Fisher的虹膜数据集,指定预测变量数据X和标签Y。
load fisheriris
X = meas;
Y = species;
rng(1); % For reproducibility
% 创建一个SVM模板,并标准化预测变量。
% t是一个SVM模板。 大多数模板对象属性为空,训练时,属性为其默认值。
t = templateSVM('Standardize',true)
% 训练ECOC分类器Mdl,并指定类别顺序。
Mdl = fitcecoc(X,Y,'Learners',t,...
'ClassNames',{'setosa','versicolor','virginica'});
% 使用10倍交叉验证对Mdl进行交叉验证
CVMdl = crossval(Mdl);
% 估计广义分类误差,误差越小说明分类器的泛化效果越好
genError = kfoldLoss(CVMdl)
Estimate Posterior Probabilities Using ECOC Classifier
使用SVM二进制学习器训练ECOC分类器。首先预测训练样本标签和类后验概率,然后预测网格中每个点的最大类后验概率,并可视化结果。(啊不想看了)
Speed Up Training ECOC Classifiers Using Binning and Parallel Computing
使用合并和并行计算加快训练ECOC分类器的速度。
使用具有替代分割的决策树GentleBoost集成训练一个一对多ECOC分类器。 为了加快训练速度,合并(bin应该是这个意思)数值预测器并使用并行计算。Binning只有在fitcecoc使用树型学习器时才有效。训练结束后,利用10倍交叉验证估计分类误差。
Optimize ECOC Classifier
每个SVM相关函数的实例中都有一个优化的例子
Train Multiclass ECOC Model with SVMs and Tall Arrays
创建两个基于高数据训练的多类ECOC模型。其中一个模型使用线性二进制学习器,另一个模型使用核心二进制学习器。 比较两个模型的分类误差。
其他
输入输出设置的内容也有很多,需要注意的是,在这里,可以使用多种分类器进行多分类,SCM只是其中的一种。
此外,fitcecoc只支持稀疏矩阵(稀疏矩阵是个啥?)用于训练线性分类模型。对于所有其他模型,请提供完整的预测数据矩阵。
更多的内容需要进一步学习啊,学吧,学无止境,太深了。