傻瓜攻略(十九)——MATLAB实现SVM多分类
對(duì)于組合二元支持向量機(jī)模型的多類學(xué)習(xí),使用糾錯(cuò)輸出碼(ECOC,error-correcting output codes )。有關(guān)詳細(xì)信息,請(qǐng)參閱fitcecoc。 ECOC 可以用來將 Multiclass Learning 問題轉(zhuǎn)化為 Binary Classification 問題。
以下內(nèi)容基于MATLAB官網(wǎng)的介紹文檔,進(jìn)行了一點(diǎn)個(gè)人的理解和整理,不算原創(chuàng),但也不是單純的翻譯。一年的博客寫作生涯,隨著博士生涯進(jìn)入正軌,我寫博客的動(dòng)力也變了,原來是純粹為了分享和成長,想寫的方法就學(xué)一學(xué)寫一寫。現(xiàn)在不行了,搞科研的方法太多了,能讓人皓首窮經(jīng),慢慢地,我就變成了沒有需求就沒有學(xué)習(xí)的的動(dòng)力。用不到的方法就不想去學(xué)了,python的學(xué)習(xí)就是這樣放下的。SVM也是,這里就開個(gè)頭吧,不知道以后還有沒有機(jī)會(huì)深入學(xué)習(xí),拿出來哪怕一個(gè)月的時(shí)間,從頭到尾地學(xué)習(xí)。現(xiàn)在這篇博客里的內(nèi)容缺斤少兩的,想看具體的英文內(nèi)容請(qǐng)點(diǎn)擊鏈接fitcecoc。
MATLAB實(shí)現(xiàn)SVM多分類
- 糾錯(cuò)輸出碼(ECOC)相關(guān)網(wǎng)頁
- 官網(wǎng)的例子
- 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
- 其他
糾錯(cuò)輸出碼(ECOC)相關(guān)網(wǎng)頁
https://www.deeplearn.me/587.html
https://blog.csdn.net/u010945683/article/details/52743515
官網(wǎng)的例子
Train Multiclass Model Using SVM Learners
使用支持向量機(jī)(SVM)二進(jìn)制學(xué)習(xí)器訓(xùn)練多類糾錯(cuò)輸出代碼(ECOC)模型。
% 導(dǎo)入數(shù)據(jù),Y中含有三類標(biāo)簽 load fisheriris X = meas; Y = species;% 使用默認(rèn)選項(xiàng)訓(xùn)練多類ECOC模型。 % Mdl是ECOC多分類模型,默認(rèn)情況下,fitcecoc使用SVM二進(jìn)制學(xué)習(xí)器和一對(duì)一編碼設(shè)計(jì),可以使用點(diǎn)表示法訪問Mdl屬性。 Mdl = fitcecoc(X,Y)% 顯示類名稱和編碼設(shè)計(jì)矩陣。 % 三個(gè)類的一對(duì)一編碼設(shè)計(jì)產(chǎn)生三個(gè)二進(jìn)制學(xué)習(xí)器。CodingMat的列對(duì)應(yīng)于學(xué)習(xí)器,行對(duì)應(yīng)于類。 % 類順序與Mdl.ClassNames類中的順序相同 % 例如,CodingMat(:,1)為[1;–1;0],表示matlab使用分類為"setosa"和"versicolor"的所有觀測值訓(xùn)練第一個(gè)支持向量機(jī)二進(jìn)制學(xué)習(xí)者。 % 因?yàn)?span id="ze8trgl8bvbq" class="token string">'setosa'對(duì)應(yīng)于1,所以它是正類;'versicolor'對(duì)應(yīng)于-1,所以它是負(fù)類。 Mdl.ClassNames CodingMat = Mdl.CodingMatrix% 使用單元格索引和點(diǎn)表示法訪問每個(gè)二進(jìn)制學(xué)習(xí)器。 Mdl.BinaryLearners{1} % The first binary learner% 計(jì)算替換類別錯(cuò)誤。 訓(xùn)練數(shù)據(jù)的分類誤差很小,但是分類器可能是過擬合模型。 可以使用crossval對(duì)分類器進(jìn)行交叉驗(yàn)證,并計(jì)算交叉驗(yàn)證分類錯(cuò)誤。 error = resubLoss(Mdl)Train Multiclass Linear Classification Model
訓(xùn)練由多個(gè)二進(jìn)制,線性分類模型組成的ECOC模型。
% 導(dǎo)入數(shù)據(jù) load nlpdata % X是預(yù)測數(shù)據(jù)的稀疏矩陣,Y是類標(biāo)簽的分類向量。數(shù)據(jù)中有兩個(gè)以上的類。 % 創(chuàng)建默認(rèn)的線性分類模型模板。 t = templateLinear(); % 訓(xùn)練由多個(gè)二進(jìn)制,線性分類模型組成的ECOC模型,這些模型可以根據(jù)文檔網(wǎng)頁上單詞的頻率分布來識(shí)別產(chǎn)品。 % 為了縮短訓(xùn)練時(shí)間,請(qǐng)轉(zhuǎn)置預(yù)測數(shù)據(jù),并指定觀察值對(duì)應(yīng)于列。 X = X'; rng(1); % For reproducibility Mdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns')Cross-Validate ECOC Classifier
使用SVM二進(jìn)制學(xué)習(xí)器對(duì)ECOC分類器進(jìn)行交叉驗(yàn)證,并估計(jì)分類錯(cuò)誤。
% 交叉驗(yàn)證ECOC分類器 % 加載Fisher的虹膜數(shù)據(jù)集,指定預(yù)測變量數(shù)據(jù)X和標(biāo)簽Y。 load fisheriris X = meas; Y = species; rng(1); % For reproducibility % 創(chuàng)建一個(gè)SVM模板,并標(biāo)準(zhǔn)化預(yù)測變量。 % t是一個(gè)SVM模板。 大多數(shù)模板對(duì)象屬性為空,訓(xùn)練時(shí),屬性為其默認(rèn)值。 t = templateSVM('Standardize',true) % 訓(xùn)練ECOC分類器Mdl,并指定類別順序。 Mdl = fitcecoc(X,Y,'Learners',t,...'ClassNames',{'setosa','versicolor','virginica'}); % 使用10倍交叉驗(yàn)證對(duì)Mdl進(jìn)行交叉驗(yàn)證 CVMdl = crossval(Mdl); % 估計(jì)廣義分類誤差,誤差越小說明分類器的泛化效果越好 genError = kfoldLoss(CVMdl)Estimate Posterior Probabilities Using ECOC Classifier
使用SVM二進(jìn)制學(xué)習(xí)器訓(xùn)練ECOC分類器。首先預(yù)測訓(xùn)練樣本標(biāo)簽和類后驗(yàn)概率,然后預(yù)測網(wǎng)格中每個(gè)點(diǎn)的最大類后驗(yàn)概率,并可視化結(jié)果。(啊不想看了)
Speed Up Training ECOC Classifiers Using Binning and Parallel Computing
使用合并和并行計(jì)算加快訓(xùn)練ECOC分類器的速度。
使用具有替代分割的決策樹GentleBoost集成訓(xùn)練一個(gè)一對(duì)多ECOC分類器。 為了加快訓(xùn)練速度,合并(bin應(yīng)該是這個(gè)意思)數(shù)值預(yù)測器并使用并行計(jì)算。Binning只有在fitcecoc使用樹型學(xué)習(xí)器時(shí)才有效。訓(xùn)練結(jié)束后,利用10倍交叉驗(yàn)證估計(jì)分類誤差。
Optimize ECOC Classifier
每個(gè)SVM相關(guān)函數(shù)的實(shí)例中都有一個(gè)優(yōu)化的例子
Train Multiclass ECOC Model with SVMs and Tall Arrays
創(chuàng)建兩個(gè)基于高數(shù)據(jù)訓(xùn)練的多類ECOC模型。其中一個(gè)模型使用線性二進(jìn)制學(xué)習(xí)器,另一個(gè)模型使用核心二進(jìn)制學(xué)習(xí)器。 比較兩個(gè)模型的分類誤差。
其他
輸入輸出設(shè)置的內(nèi)容也有很多,需要注意的是,在這里,可以使用多種分類器進(jìn)行多分類,SCM只是其中的一種。
此外,fitcecoc只支持稀疏矩陣(稀疏矩陣是個(gè)啥?)用于訓(xùn)練線性分類模型。對(duì)于所有其他模型,請(qǐng)?zhí)峁┩暾念A(yù)測數(shù)據(jù)矩陣。
更多的內(nèi)容需要進(jìn)一步學(xué)習(xí)啊,學(xué)吧,學(xué)無止境,太深了。
總結(jié)
以上是生活随笔為你收集整理的傻瓜攻略(十九)——MATLAB实现SVM多分类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3性能还低吗_Python3
- 下一篇: python可以调用windows资源吗