机器学习:林智仁libsvm 工具箱 在matlab下的应用总结
一、機器學習中的libsvm介紹
支持向量機(SUPPORT VECTOR MACHINE),是非常強大且流行的算法,在一些情況下,能面向一些復雜的非線性問題提供比邏輯回歸或神經網絡要更加簡潔的解決方案。?
下面具體講一下SVM?
?
?
LIBSVM是臺灣大學林智仁(Lin Chih-Jen)教授等開發設計的一個簡單、易于使用和快速有效的SVM模式識別與回歸的軟件包,他不但提供了編譯好的可在Windows系列系統的執行文件,還提供了源代碼,方便改進、修改以及在其它操作系統上應用;該軟件對SVM所涉及的參數調節相對比較少,提供了很多的默認參數,利用這些默認參數可以解決很多問題;并提供了交互檢驗(Cross Validation)的功能。該軟件可以解決C-SVM、ν-SVM、ε-SVR和ν-SVR等問題,包括基于一對一算法的多類模式識別問題。
下面一個網站里面是大牛寫的關于libsvm的一些東西,可以看看?關于libsvm的那點破事
二、libsvm在matlab下的安裝
1、首先下載libsvm工具箱
下載網址:LIBSVM a library for support vector machines?
上述網址是林智仁官網,可以從github中下載最新版本的libsvm
2、接著是將下載的工具箱安裝
(File ——》?
Set Path… ——》?
Add with Subfolders…);
詳細的步驟講解請看?LIBSVM 在matlab下的安裝?
這里我只說我遇到的問題,在選擇編譯器的時候不管是 y還是n 都找不到自己所安裝的編譯器,有可能是安裝順序的問題,我所解決的方法是,講編譯器和matlab卸載,然后重新安裝,重安裝的時候注意先安裝編譯器,再安裝matlab
在編譯文件make的時候出現找不到文件,需要進入到libsvm-master>matlab 中再make就可以了
三、 libsvm工具箱在matlab下的應用
詳細的使用說明請看網址?如何使用LIBSVM進行分類
<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來訓練出一個模型,引號里面參數的詳細解釋看上述網址的詳解</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和訓練出的模型進行做預測</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是自己寫的一個評估函數</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的實際應用
1、獲取原始數據
獲取所需要的特征值和標簽
2、將數據進行預處理
差分、歸一化?
(1)差分?
由于氣象中的特征,差分后的特征值會包含一些有用的信息,所以需要差分。新的特征值=原始特征值+差分(差分用的是向前差分d(t)=data(t)-data(t-1))?
(2)歸一化?
現在的歸一化方法有兩種max_min歸一化和mu_sigma歸一化。公式如下:?
new—data=(data-min)/(max-min)?
new—data=(data-mu)/sigma
經對比結果發現第一種歸一化方法更適用于我們的應用。
3、訓練、預測
這里的訓練、預測如‘三、libsvm工具箱在matlab下的應用’中的代碼
4、評估
對評估結果分析發現POD、CSI、FAR達不到要求,分析可能是由于正例置信度為0.5,即:當某一個樣例的概率大于50%,預測此樣例為正樣例。如果想要提高各項預測值,需要獲得每個樣本的預測概率以此來修改置信度。?
具體解決方法如下?
如上圖橢圓框出來的,在訓練 svmtrain和預測 svmpredict的時候都加上參數‘-b 1’會得到 dec_values。 在我們的實驗中(二分,label 有1和-1)dec_values分為2列,第一列為樣例預測為-1的概率,第二列為樣例預測為1的概率。這樣我們就可以根據dec_values來調整閾值(正例置信度),以達到提高精確度的效果。
五、小結
通過這一階段的學習我發現,不能怕遇到問題,遇到問題后不能急仔細查找各種解決的方法。要仔細分析。。。心細。。。
總結
以上是生活随笔為你收集整理的机器学习:林智仁libsvm 工具箱 在matlab下的应用总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CNN(Convolutional Ne
- 下一篇: Precision和Recall