1.數據集:采用 matlab2016b 自帶數據集:iris鳶尾花、ionosphere電離層數據
2.采用函數 fitcecoc 進行SVM多分類模型訓練;【fitcecoc:ecoc:error-correcting output code】
3.采用10折交叉驗證對數據集進行划分,將Mdl轉化為 CVMdl
4.將誤差ossLoss作為模型的評價指標
示例1:鳶尾花數據集iris
function [CVMdl,oosLoss]=SVM3() %分成三類
load fisheriris
X = meas; %150*4 :150個樣本,4個特征(萼長、萼寬、瓣長、瓣寬);meas=measure(長度) Y = species; %三種屬性{'setosa','versicolor','virginica'};species(種類) t = templateSVM('Standardize',1); %創建SVM模板t;
%templateSVM是fitcecoc函數中的SVM模板;
%standardize:數據標准化,可用help查看templateSVM其他參數 %訓練該模型 Mdl = fitcecoc(X,Y,'Learners',t,'ClassNames',{'setosa','versicolor','virginica'}); %驗證該模型 CVMdl = crossval(Mdl); %將模型進行交叉驗證,平衡模型欠擬合和過擬合 %顯示結果 oosLoss = kfoldLoss(CVMdl) %10折交叉驗證得到的泛化誤差 oosloss =0.033,效果很好
結果如下:
>> [CVMdl,oosLoss]=SVM3()
CVMdl =
classreg.learning.partition.ClassificationPartitionedECOC
CrossValidatedModel: 'ECOC'
PredictorNames: {'x1' 'x2' 'x3' 'x4'}
ResponseName: 'Y'
NumObservations: 150
KFold: 10
Partition: [1x1 cvpartition]
ClassNames: {'setosa' 'versicolor' 'virginica'}
ScoreTransform: 'none'
CrossValidatedModel: 'ECOC'
PredictorNames: {'x1' 'x2' 'x3' 'x4'}
ResponseName: 'Y'
NumObservations: 150
KFold: 10
Partition: [1x1 cvpartition]
ClassNames: {'setosa' 'versicolor' 'virginica'}
ScoreTransform: 'none'
Properties, Methods
oosLoss =
0.0333333333333333
示例2:電離層數據二分類
% matlab自帶電離層
load ionosphere;
%使用默認選項訓練ECOC多類模型 model_2 = fitcecoc(X,Y); %創建一個SVM模板 t_2 = templateSVM('Standardize',1); %接下來訓練ECOC分類器 model_2 = fitcecoc(X,Y,'Learners',t_2); %使用10倍交叉驗證交叉驗證Mdl CVmodel_2 = crossval(model_2); %估算泛化誤差 oosLoss_2 = kfoldLoss(CVmodel_2);
結果:
>> [CVmodel_2,oosLoss_2]=SVM31()
CVmodel_2 = classreg.learning.partition.ClassificationPartitionedECOC CrossValidatedModel: 'ECOC' PredictorNames: {1x34 cell} ResponseName: 'Y' NumObservations: 351 KFold: 10 Partition: [1x1 cvpartition] ClassNames: {'b' 'g'} ScoreTransform: 'none' Properties, Methods oosLoss_2 = 0.113960113960115
參考資料:
1.官方文檔:https://www.mathworks.com/help/stats/fitcecoc.html
2.代碼參考:fitcecoc的其他數據集嘗試: https://blog.csdn.net/kekeicon/article/details/72812097,作者:kekeicon
3.matlab自帶數據集一覽:https://ww2.mathworks.cn/help/stats/sample-data-sets.html