傻瓜攻略(十九)——MATLAB实现SVM多分类
對于組合二元支持向量機模型的多類學習,使用糾錯輸出碼(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只支持稀疏矩陣(稀疏矩陣是個啥?)用于訓練線性分類模型。對于所有其他模型,請提供完整的預測數據矩陣。
更多的內容需要進一步學習啊,學吧,學無止境,太深了。
總結
以上是生活随笔為你收集整理的傻瓜攻略(十九)——MATLAB实现SVM多分类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3性能还低吗_Python3
- 下一篇: 什么叫有效物理网卡_如何区分虚拟网卡和物