SVM学习——在matlab上安装libsvm库(一)
生活随笔
收集整理的這篇文章主要介紹了
SVM学习——在matlab上安装libsvm库(一)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
環(huán)境搭建
平臺:
- Windows PC
- MATLAB 軟件
- libsvm庫(SVM工具箱)
安裝步驟
準備工作
- 安裝對應的編譯器,在網(wǎng)站上查看當前matlab版本支持的編譯器版本。本文使用的matlab 2015a版本(支持編譯器詳情)。
- 通過查詢,發(fā)現(xiàn)Microsoft Windows SDK7.1支持matlab 2015a,所以下面安裝這個編譯器。
- 根據(jù)安裝說明,在安裝這個Windows SDK7.1之前,1)首先需要安裝最新的Windows service Pack,用于更新(ps:猜測每個電腦都默認安裝,所以在安裝過程中直接忽視了這條要求)。2)安裝Microsoft .NET Framework 4,用于支持安裝Microsoft Windows SDK7.1。
安裝libsvm
- 在libsvm官網(wǎng)上查找相應的libsvm庫,選擇MATLAB and OCTAVE語言,下載最新版的libsvm-3.22.zip
- 下載后把工具包放在MATLAB安裝目錄下的toolbox文件夾中,例如, D:\Learn program\matlab2015a\toolbox\libsvm-3.22。
- 假設你使用的是64位的操作系統(tǒng)和matlab。打開matlab,在matlab目錄中添加(set path):D:\Learn program\matlab2015a\toolbox\libsvm-3.22\windows。因為windows下包含了matlab可執(zhí)行的二進制文件libsvmread.mexw64/libsvmwrite.mexw64/svmpredict.mexw64/svmtrain.mexw64
- 在matlab中,進入到D:\Learn program\matlab2015a\toolbox\libsvm-3.22\matlab目錄下。運行mex –setup,此時按照LIBSVM在matlab下的使用安裝文中提到的步驟繼續(xù)操作。
但是由于接口的問題,又出現(xiàn)警告:
MEX 配置為使用 ‘Microsoft Visual C++ 2012 (C)’ 以進行 C 語言編譯。
警告: MATLAB C 和 Fortran API 已更改,現(xiàn)可支持
包含 2^32-1 個以上元素的 MATLAB 變量。不久以后,您需要更新代碼以利用新的 API。您可以在以下網(wǎng)址找到相關詳細信息:http://www.mathworks.com/help/ma ... use-64-bit-api.html。根據(jù) 關于libsvm工具箱在64位matlab下的安裝說明文中提到的方法,進行下面關鍵兩步:
- 切換matlab運行目錄至:D:\Learn program\matlab2015a\toolbox\libsvm-3.22\matlab,在命令行輸入make,也就是該目錄下的那個make文件。這時候就像以前安裝libsvm一樣,會自動make出來很多文件,不用管,主要是會看到make出帶有mexm64后綴名的文件,這就成功了。
- 拷貝第一步中matlab文件夾下所有make出來的文件(.mex64),到libsvm-3.22\windows文件夾下,全部替換。這樣就可以了。
測試(此處將libsvm-3.22中文heart_scale拷貝到libsvm-3.22\matlab目錄下,運行下面的語句)
1
2
3[heart_scale_label,heart_scale_inst]=libsvmread('heart_scale');
model = svmtrain(heart_scale_label,heart_scale_inst, '-c 1 -g 0.07');
[predict_label, accuracy, dec_values] =svmpredict(heart_scale_label, heart_scale_inst, model); % test the trainingdata測試結果,出現(xiàn)如下結果表明安裝成功
1
2
3
4
5
6optimization finished, #iter = 134
nu = 0.433785
obj = -101.855060, rho = 0.426412
nSV = 130, nBSV = 107
Total nSV = 130
Accuracy = 86.6667% (234/270) (classification)
SVM參數(shù)優(yōu)化
MATLAB中三種得到最佳g和c參數(shù)的方法:
遺傳算法(GA)選擇最佳的SVM參數(shù)c&g
- 在運行案例時,報錯:Undefined function or variable 'rep'.,未找到rep函數(shù),此時,需要安裝GA的工具箱,下載英國謝菲爾德大學開發(fā)的遺傳算法工具箱gatbx,可從此處下載
由于其中的函數(shù)擴展名是M,而不是m,需要將其全部改為小寫的m,再把文件夾復制到toolbox中,加載至matlab,即可。
函數(shù)接口介紹
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17(1)利用GA參數(shù)尋優(yōu)函數(shù)(分類問題):gaSVMcgForClass
[bestCVaccuracy,bestc,bestg,ga_option]=
gaSVMcgForClass(train_label,train,ga_option)
輸入:
train_label:訓練集的標簽,格式要求與svmtrain相同。
train:訓練集,格式要求與svmtrain相同。
ga_option:GA中的一些參數(shù)設置,可不輸入,有默認值,詳細請看代碼的幫助說明。
輸出:
bestCVaccuracy:最終CV意義下的最佳分類準確率。
bestc:最佳的參數(shù)c。
bestg:最佳的參數(shù)g。
ga_option:記錄GA中的一些參數(shù)。
\==========================================================
(2)利用GA參數(shù)尋優(yōu)函數(shù)(回歸問題):gaSVMcgForRegress
[bestCVmse,bestc,bestg,ga_option]=
gaSVMcgForRegress(train_label,train,ga_option)
其輸入輸出與gaSVMcgForClass類似,這里不再贅述。使用案例,加入gaSVMcgForClass.m函數(shù)
1
2
3
4
5
6
7
8
9
10
11
12% GA的參數(shù)選項初始化
ga_option.maxgen = 200;
ga_option.sizepop = 20;
ga_option.cbound = [0,100];
ga_option.gbound = [0,100];
ga_option.v = 5;
ga_option.ggap = 0.9;
% 得到最佳參數(shù)
[bestacc,bestc,bestg] = gaSVMcgForClass(train_wine_labels,train_wine,ga_option);
% 利用最佳的參數(shù)進行SVM網(wǎng)絡訓練
cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg)];
model = svmtrain(train_wine_labels,train_wine,cmd);
PSO選擇最佳的SVM參數(shù)c&g
使用案例,加入psoSVMcgForClass.m函數(shù)
1
2
3
4
5% 得到最佳參數(shù)
[bestacc,bestc,bestg] = psoSVMcgForClass(train_wine_labels,train_wine);
% 利用最佳的參數(shù)進行SVM網(wǎng)絡訓練
cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg)];
model = svmtrain(train_wine_labels,train_wine,cmd);
貪婪算法(Grid)選擇最佳的SVM參數(shù)c&g
使用案例,加入gridSVMcgForClass.m函數(shù)
1
2
3
4
5
6
7% 首先進行粗略選擇: c&g 的變化范圍是 2^(-10),2^(-9),...,2^(10)
[bestacc,bestc,bestg] = gridSVMcgForClass(train_wine_labels,train_wine,-10,10,-10,10);
% 根據(jù)粗略選擇的結果圖再進行精細選擇: c 的變化范圍是 2^(-2),2^(-1.5),...,2^(4), g 的變化范圍是 2^(-4),2^(-3.5),...,2^(4),
[bestacc,bestc,bestg] = SVMcgForClass(train_wine_labels,train_wine,-2,4,-4,4,3,0.5,0.5,0.9);
%% 利用最佳的參數(shù)進行SVM網(wǎng)絡訓練
cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg)];
model = svmtrain(train_wine_labels,train_wine,cmd);
參考:
總結
以上是生活随笔為你收集整理的SVM学习——在matlab上安装libsvm库(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022年中国新能源汽车销量680万辆
- 下一篇: 逾期后,如何修复个人征信?