机器学习:林智仁libsvm 工具箱 在matlab下的应用总结
一、機(jī)器學(xué)習(xí)中的libsvm介紹
支持向量機(jī)(SUPPORT VECTOR MACHINE),是非常強(qiáng)大且流行的算法,在一些情況下,能面向一些復(fù)雜的非線性問(wèn)題提供比邏輯回歸或神經(jīng)網(wǎng)絡(luò)要更加簡(jiǎn)潔的解決方案。?
下面具體講一下SVM?
?
?
LIBSVM是臺(tái)灣大學(xué)林智仁(Lin Chih-Jen)教授等開(kāi)發(fā)設(shè)計(jì)的一個(gè)簡(jiǎn)單、易于使用和快速有效的SVM模式識(shí)別與回歸的軟件包,他不但提供了編譯好的可在Windows系列系統(tǒng)的執(zhí)行文件,還提供了源代碼,方便改進(jìn)、修改以及在其它操作系統(tǒng)上應(yīng)用;該軟件對(duì)SVM所涉及的參數(shù)調(diào)節(jié)相對(duì)比較少,提供了很多的默認(rèn)參數(shù),利用這些默認(rèn)參數(shù)可以解決很多問(wèn)題;并提供了交互檢驗(yàn)(Cross Validation)的功能。該軟件可以解決C-SVM、ν-SVM、ε-SVR和ν-SVR等問(wèn)題,包括基于一對(duì)一算法的多類(lèi)模式識(shí)別問(wèn)題。
下面一個(gè)網(wǎng)站里面是大牛寫(xiě)的關(guān)于libsvm的一些東西,可以看看?關(guān)于libsvm的那點(diǎn)破事
二、libsvm在matlab下的安裝
1、首先下載libsvm工具箱
下載網(wǎng)址:LIBSVM a library for support vector machines?
上述網(wǎng)址是林智仁官網(wǎng),可以從github中下載最新版本的libsvm
2、接著是將下載的工具箱安裝
(File ——》?
Set Path… ——》?
Add with Subfolders…);
詳細(xì)的步驟講解請(qǐng)看?LIBSVM 在matlab下的安裝?
這里我只說(shuō)我遇到的問(wèn)題,在選擇編譯器的時(shí)候不管是 y還是n 都找不到自己所安裝的編譯器,有可能是安裝順序的問(wèn)題,我所解決的方法是,講編譯器和matlab卸載,然后重新安裝,重安裝的時(shí)候注意先安裝編譯器,再安裝matlab
在編譯文件make的時(shí)候出現(xiàn)找不到文件,需要進(jìn)入到libsvm-master>matlab 中再make就可以了
三、 libsvm工具箱在matlab下的應(yīng)用
詳細(xì)的使用說(shuō)明請(qǐng)看網(wǎng)址?如何使用LIBSVM進(jìn)行分類(lèi)
<code class="hljs delphi has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//%獲取traindata、trainlabel,testdata、testlabel</span> traindata =[ train( : , <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span> ), train( : , <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span> ), train( : , <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span> ), train( : , <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span> )]; trainlabel = train( : , <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">14</span> );testdata = [ test( : , <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span> ), test( : , <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span> ), test( : , <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span> ), test( : , <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span> ) ]; testlabel = test( : , <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">14</span> );<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//%用traindata和trainlabel來(lái)訓(xùn)練出一個(gè)模型,引號(hào)里面參數(shù)的詳細(xì)解釋看上述網(wǎng)址的詳解</span> model = svmtrain(trainlabel ,traindata,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'-s 0 -t 2 -c 4 -g 1.2 -b 1'</span>); save model model<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//%用testdata、testlabel和訓(xùn)練出的模型進(jìn)行做預(yù)測(cè)</span> [plabel, accuracy, dec_values] = svmpredict(testlabel,testdata,model,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'-b 1'</span>); save <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">label</span>.txt plabel -ascii<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//%evaluate training results evaluate是自己寫(xiě)的一個(gè)評(píng)估函數(shù)</span> [TP,FN,FP,TN,POD,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">FAR</span>,CSI,AUC,P,R,F] = Evaluate(plabel,testlabel); save result P R F AUC CSI POD <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">FAR</span> TP FN FP TN dec_values </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li></ul>四、 libsvm的實(shí)際應(yīng)用
1、獲取原始數(shù)據(jù)
獲取所需要的特征值和標(biāo)簽
2、將數(shù)據(jù)進(jìn)行預(yù)處理
差分、歸一化?
(1)差分?
由于氣象中的特征,差分后的特征值會(huì)包含一些有用的信息,所以需要差分。新的特征值=原始特征值+差分(差分用的是向前差分d(t)=data(t)-data(t-1))?
(2)歸一化?
現(xiàn)在的歸一化方法有兩種max_min歸一化和mu_sigma歸一化。公式如下:?
new—data=(data-min)/(max-min)?
new—data=(data-mu)/sigma
經(jīng)對(duì)比結(jié)果發(fā)現(xiàn)第一種歸一化方法更適用于我們的應(yīng)用。
3、訓(xùn)練、預(yù)測(cè)
這里的訓(xùn)練、預(yù)測(cè)如‘三、libsvm工具箱在matlab下的應(yīng)用’中的代碼
4、評(píng)估
對(duì)評(píng)估結(jié)果分析發(fā)現(xiàn)POD、CSI、FAR達(dá)不到要求,分析可能是由于正例置信度為0.5,即:當(dāng)某一個(gè)樣例的概率大于50%,預(yù)測(cè)此樣例為正樣例。如果想要提高各項(xiàng)預(yù)測(cè)值,需要獲得每個(gè)樣本的預(yù)測(cè)概率以此來(lái)修改置信度。?
具體解決方法如下?
如上圖橢圓框出來(lái)的,在訓(xùn)練 svmtrain和預(yù)測(cè) svmpredict的時(shí)候都加上參數(shù)‘-b 1’會(huì)得到 dec_values。 在我們的實(shí)驗(yàn)中(二分,label 有1和-1)dec_values分為2列,第一列為樣例預(yù)測(cè)為-1的概率,第二列為樣例預(yù)測(cè)為1的概率。這樣我們就可以根據(jù)dec_values來(lái)調(diào)整閾值(正例置信度),以達(dá)到提高精確度的效果。
五、小結(jié)
通過(guò)這一階段的學(xué)習(xí)我發(fā)現(xiàn),不能怕遇到問(wèn)題,遇到問(wèn)題后不能急仔細(xì)查找各種解決的方法。要仔細(xì)分析。。。心細(xì)。。。
總結(jié)
以上是生活随笔為你收集整理的机器学习:林智仁libsvm 工具箱 在matlab下的应用总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CNN(Convolutional Ne
- 下一篇: Precision和Recall