Libsvm的MATLAB調用和交叉驗證


今天聽了一個師兄的講課,才發現我一直在科研上特別差勁,主要表現在以下幾個方面,(現在提出也為了督促自己在以后的學習工作道路上能夠避免這些問題)

1、做事情總是有頭無尾,致使知識點不能一次搞透,每次在用到相同知識點的時候才發現之前對這個知識了解的還是不透徹。

2、不善於總結,做的東西(如代碼和論文)很多也比較雜,但是卻沒有記錄每一項工作,致使到最后很難理清之前做過的東西。

3、檢索能力較差,致使尋找自己需要的資料需要耗費太長的時間。

4、閱讀文獻的數量太少,因此很難提出新的想法和見解。

以上4點是我認為的科研和工作中主要需要提高的地方,我也從現在起開始逐條的改善,希望1個月之后的我可以養成良好的習慣,使得上面的缺陷得以修正。

下面就進行第一個改善:SVM接觸時間很長了,理論和代碼都研究和使用過,由於網上的資料整理的很多,自己就懶得整理,每次有問題就百度、谷歌一下基本都解決了,但是現在如果有人問我相關具體的內容,我還是很難答出來,畢竟別人的東西就是別人的,看了並不代表你掌握了,只有自己掌握的知識才是自己的,才能與人交流,並提出自己的見解。

一、SVM如何使用MATLAB調用

我之所以介紹這個,主要的原因是,大家在做機器視覺算法時使用最多的工具,而matlab中自帶的svm工具箱又只能用於分兩類的情況,而且不能進行交叉驗證選擇合適的參數,但是在正常的使用時不可避免的會遇到分多類的問題,而且選擇合適的參數對於SVM也非常重要。下面介紹如何下載libsvm,配置matlab環境。

主要參考的主頁有:http://blog.csdn.net/abcjennifer/article/details/7370177

1. 參考網站:

libsvm庫下載:http://www.csie.ntu.edu.tw/~cjlin/libsvm/http://www.matlabsky.com/thread-9327-1-1.html(faruto,推薦)

視頻:http://v.youku.com/v_showMini/id_XMjc2NTY3MzYw_ft_131.html 

詳解:http://www.matlabsky.com/thread-11925-1-1.html

2、配置MATLAB環境

A.設置path

File->set path ->add with subfolders->加入libsvm-3.11文件夾的路徑

B. 在matlab中編譯

目的:將libsvm-3.11\matlab 中 libsvmwrite.c 等 C++文件編譯成 libsvmread.mexw32 等matlab文件,這樣就可以在command window中被直接調用了。

操作如下:1、mex -setup

 

             Please choose your compiler for building external interface (MEX) files:

     Would you like mex to locate installed compilers [y]/n? y

       

    Please choose your compiler for building external interface (MEX) files:

    Would you like mex to locate installed compilers [y]/n? y
    Select a compiler:
    [1] Lcc-win32 C 2.4.1 in D:\MATLAB~1\sys\lcc
    [2] Microsoft Visual C++ 6.0 in D:\Microsoft Visual Studio

    [0] None

    Compiler: (此處不同版本的MATLAB和自己安裝的編譯器的不同顯示會有差別,因此只要選擇你已經安裝的編譯器就好了)

 

    

  Compiler: 2

  Please verify your choices:

  Compiler: Microsoft Visual C++ 6.0
  Location: D:\Microsoft Visual Studio

  Are these correct [y]/n? y

  Trying to update options file: C:\Users\faruto\AppData\Roaming\MathWorks\MATLAB\R2009b\mexopts.bat
  From template: D:\MATLAB~1\bin\win32\mexopts\msvc60opts.bat

  Done . . .

 

   2、make

  make

     此過程中一定要注意將路徑轉換到matlab路徑下,這樣才能調用make函數進行make.

     上述需要注意的地方都已經指出來了,我也已經在matlab2012a和VS2010中測試過,好使。

  操作結束就可以使用現成的數據集heart_scale來測試一下了,出現Accuracy = 86.6667% (234/270) (classification)

1 load('heart_scale')
2 model = svmtrain(heart_scale_label,heart_scale_inst);  
3 [predict_label,accuracy] = svmpredict(heart_scale_label,heart_scale_inst,model); 

      其中的‘heart_scale’在libsvm中自帶的mat文件。

二、如何參數尋優

  參考網址:http://www.ilovematlab.cn/thread-47819-1-1.html,這篇帖子介紹的非常詳細,主要使用了SVMcg函數來進行C和g的尋優。

1 %添加參數尋優代碼
2 [bestacc,bestc,bestg] = SVMcg(heart_scale_label,heart_scale_inst,-9,9,-1,1,5,1,1);

  因為此測試用例並不規范,因此使用不能很好的體現參數尋優之后的優勢。

以上就是實驗部分,通過小小的實驗可以對SVM的工作有了大概的了解,同時也促進自己學習理論的動力,因此下面一片博客就主要介紹SVM理論方面的內容,因為SVM理論方面的介紹也非常多,因此我主要把那些好的參考內容進行整理,同時將自己的心得體會和理解寫出來,方便自己查看,也方便大家交流。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM