matlab的支持向量机调参,支持向量机(2)-应用
svm-pref 是康奈爾大學的 Thorsten Joachims 實現的
libsvm 和 liblinear 都是由國立臺灣大學的 Chih-Jen Lin 博士開發的,本文主要考慮該實現
libsvm 和 liblinear 的區別
兩者均以 c/c++ 實現底層,接口支持完善(MATLAB、Python、Java、C#、R等)
libsvm 用來解決通用分類問題
liblinear 主要為大規模數據的線性模型設計,僅包含線性核,計算速度比 libsvm 快得多
此外,文章還給出了幾條經驗:
若特征數遠大于樣本數,使用線性核就可以(liblinear)
若特征數和樣本數都很大,一般也使用線性核
若特征數遠小于樣本數,一般使用 RBF 核。如果一定要用線性核,建議 -s 2
使用 libsvm
數據格式
# ::...
1 1:-0.55556 2:0.5 3:-0.69491 4:-0.75
3 1:-0.16667 2:-0.33333 3:0.38983 4:0.91667
label 為該組樣本的類別(libsvm 支持多類)
index 為該樣本特征序號
value 為第 index 特征的值
數據歸一化
libsvm 提供了接口 svm-scale
svm-scale [options]filename
options:
-l -u : 上下界(默認[-1,1])-s -r : save/read scalefile-y : 類別的標準化(如:-y 0 1)
數據的訓練
svm-train [options] datafile [modelfile]
options:
-s : svm 類型,默認第0種 一共有5種:0 -- C-SVC(多類別分類)
1 -- nu-SVC(多類別分類)
2 -- one-class SVM(分布估計)
3 -- epsilon-SVR(回歸)
4 -- nu-SVR(回歸)
-t : 核函數類型,默認第2種 一共有5種:0 -- 線性核(u'*v)
1 -- 多項式核((gamma*u'*v + coef0)^degree)
2 -- RBF核(exp(-gamma*|u-v|^2))
3 -- sigmoid核(tanh(gamma*u'*v + coef0))
4 -- precompute kernel(使用訓練數據生成)
-d : degree,默認 3-g :gamma,默認 1/num_features-r :coef0,默認 0-c :cost,針對 C-SVC, epsilon-SVR, and nu-SVR,默認 1-n :nu,針對 nu-SVC, one-class SVM, and nu-SVR,默認 0.5-p :e,設置epsilon-SVR中的 e,默認0.1-m :cachesize,內存大小,默認 100MB-e : 終止條件的可容忍偏差,默認 0.001-h :shrinking,是否使用啟發式,默認 1-b :概率估計,是否估計SVC或SVR的概率分布,默認0-wi :weight,對各類樣本的懲罰系數C加權,默認 1-v n :n-折 交叉驗證模式,不會生成模型文件
調參
使用 libsvm 提供的 grid.py 實現自動尋參
#適用于 分類問題 RBF核和線性核
python [options] grid.py datafile
預測
svm-predict [options] test_file model_file output_file
options:
-b :概率估計,是否估計SVC或SVR的概率分布,默認0
C/C++接口
工程里加入 libsvm 的 “svm.h”和“svm.cpp”即可
調用方法參考文件 “svm-scale.c”、“svm-train.c”和“svm-predict.c”
Python接口
參考“libsvm/python/README”
#通過文件讀取
from svmutil import *
# Read data in LIBSVM format
y, x = svm_read_problem('../heart_scale')
m = svm_train(y[:200], x[:200], '-c 4')
p_label, p_acc, p_val = svm_predict(y[200:], x[200:], m)
#輸入數據
# Dense data
y, x = [1,-1], [[1,0,1], [-1,0,-1]]
# Sparse data
y, x = [1,-1], [{1:1, 3:1}, {1:-1,3:-1}]
prob = svm_problem(y, x)
param = svm_parameter('-t 0 -c 4 -b 1')
m = svm_train(prob, param)
#precomputed kernel 模式
# Dense data
y, x = [1,-1], [[1, 2, -2], [2, -2, 2]]
# Sparse data
y, x = [1,-1], [{0:1, 1:2, 2:-2}, {0:2, 1:-2, 2:2}]
# isKernel=True must be set for precomputed kernel
prob = svm_problem(y, x, isKernel=True)
param = svm_parameter('-t 4 -c 4 -b 1')
m = svm_train(prob, param)
#模型保存與讀取
svm_save_model('heart_scale.model', m)
m = svm_load_model('heart_scale.model')
p_label, p_acc, p_val = svm_predict(y, x, m, '-b 1')
ACC, MSE, SCC = evaluations(y, p_label)
總結
以上是生活随笔為你收集整理的matlab的支持向量机调参,支持向量机(2)-应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php cms使用视频教程,PHPCMS
- 下一篇: matlab怎么算2乘2矩阵,【Matl