对fitcecoc的初步学习

对fitcecoc的学习来自http://cn.mathworks.com/help/stats/fitcecoc.html。
1. fitcecoc是matlab自带的多类分类工具,在matlab2014及以后的版本中存在。
2. 下面结合matlab自带的help中例子及使用LIBSVM DATA中的电离层数据和UCI数据库的意大利葡萄酒数据测试fitcecoc函数。
给出代码段:

%对fitcecoc的学习
%学习过程来自http://cn.mathworks.com/help/stats/fitcecoc.html
%使用的是fisheriris数据
load fisheriris;
%X存储的是样本数据
%Y存储的是其标签
X = meas;
Y = species;
%使用默认选项训练ECOC多类模型
Mdl = fitcecoc(X,Y);

% Mdl返回值
% Mdl = 

%  ClassificationECOC
%             ResponseName: 'Y'
%    CategoricalPredictors: []
%               ClassNames: {'setosa'  'versicolor'  'virginica'}
%           ScoreTransform: 'none'
%           BinaryLearners: {3x1 cell}
%               CodingName: 'onevsone'

%创建一个SVM模板
t = templateSVM('Standardize',1);

% t返回值
%t = 

%Fit template for classification SVM.
%
%                    Alpha: [0x1 double]
%            BoxConstraint: []
%                CacheSize: []
%            CachingMethod: ''
%               ClipAlphas: []
%   DeltaGradientTolerance: []
%                  Epsilon: []
%             GapTolerance: []
%             KKTTolerance: []
%           IterationLimit: []
%           KernelFunction: ''
%              KernelScale: []
%             KernelOffset: []
%    KernelPolynomialOrder: []
%                 NumPrint: []
%                       Nu: []
%          OutlierFraction: []
%          ShrinkagePeriod: []
%                   Solver: ''
%          StandardizeData: 1
%       SaveSupportVectors: []
%           VerbosityLevel: []
%                  Version: 1
%                   Method: 'SVM'
%                     Type: 'classification'
% t是SVM模板,除了StandardizeData,Method和Type之外,它的所有属性都为空。
% 当软件训练ECOC分类器时,它将适用的属性设置为其默认值

%接下来训练ECOC分类器
Mdl = fitcecoc(X,Y,'Learners',t,...
    'ClassNames',{'setosa','versicolor','virginica'});

%使用10倍交叉验证交叉验证Mdl
CVMdl = crossval(Mdl);
%估算泛化误差
oosLoss = kfoldLoss(CVMdl);
%得出来oosLoss为 0.0333,表示分类效果很好


%% 使用libsvm的电离层数据进行测试

load dianliceng;
x_2 = ionosphere_scale_inst;
y_2 = ionosphere_scale_label;
x_2 = full(x_2);

%使用默认选项训练ECOC多类模型
model_2 = fitcecoc(x_2,y_2);

%创建一个SVM模板
t_2 = templateSVM('Standardize',1);
%接下来训练ECOC分类器
model_2 = fitcecoc(x_2,y_2,'Learners',t_2);
%使用10倍交叉验证交叉验证Mdl
CVmodel_2 = crossval(model_2);
%估算泛化误差
oosLoss_2 = kfoldLoss(CVmodel_2);
%得到的oosLoss_2是0.1168
%使用林智仁先生的libsvm-3.22工具箱时,得到的 Accuracy = 96.6887% (146/151) (classification)
%在K-CV网格寻优后,得到的Accuracy = 98.0132% (148/151) (classification)



%% 使用葡萄酒数据测试fitcecoc函数
load wine;
x_1 = winedata;
y_1 = winelabel;
x_1 = full(winedata);
model_1 = fitcecoc(x_1,y_1);
t_1 = templateSVM('Standardize',1);
model_1 = fitcecoc(x_1,y_1,'Learners',t_1);
CVmodel_1 = crossval(model_1);
ossLoss_1 = kfoldLoss(CVmodel_1);
%得到的ossLoss_1是0.0337
%使用林智仁先生的libsvm-3.22工具箱时,将数据归一化处理,
%并进行K-CV网格对c、g寻优后得到的最佳 Accuracy = 98.8764% (88/89) (classification)

在使用fitcecoc 时,须注意的是样本数据不能是稀疏矩阵,若是稀疏矩阵,使用full()来转换。
就我个人来讲,还是比较偏爱用libsvm来做分类。当然,对fitcecoc的学习尚在初级阶段,后续如若用到,会继续补充。

你可能感兴趣的:(MATLAB学习笔记)