matlab的支持向量机调参,支持向量机(2)-应用
svm-pref 是康奈爾大學(xué)的 Thorsten Joachims 實(shí)現(xiàn)的
libsvm 和 liblinear 都是由國(guó)立臺(tái)灣大學(xué)的 Chih-Jen Lin 博士開(kāi)發(fā)的,本文主要考慮該實(shí)現(xiàn)
libsvm 和 liblinear 的區(qū)別
兩者均以 c/c++ 實(shí)現(xiàn)底層,接口支持完善(MATLAB、Python、Java、C#、R等)
libsvm 用來(lái)解決通用分類(lèi)問(wèn)題
liblinear 主要為大規(guī)模數(shù)據(jù)的線性模型設(shè)計(jì),僅包含線性核,計(jì)算速度比 libsvm 快得多
此外,文章還給出了幾條經(jīng)驗(yàn):
若特征數(shù)遠(yuǎn)大于樣本數(shù),使用線性核就可以(liblinear)
若特征數(shù)和樣本數(shù)都很大,一般也使用線性核
若特征數(shù)遠(yuǎn)小于樣本數(shù),一般使用 RBF 核。如果一定要用線性核,建議 -s 2
使用 libsvm
數(shù)據(jù)格式
# ::...
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 為該組樣本的類(lèi)別(libsvm 支持多類(lèi))
index 為該樣本特征序號(hào)
value 為第 index 特征的值
數(shù)據(jù)歸一化
libsvm 提供了接口 svm-scale
svm-scale [options]filename
options:
-l -u : 上下界(默認(rèn)[-1,1])-s -r : save/read scalefile-y : 類(lèi)別的標(biāo)準(zhǔn)化(如:-y 0 1)
數(shù)據(jù)的訓(xùn)練
svm-train [options] datafile [modelfile]
options:
-s : svm 類(lèi)型,默認(rèn)第0種 一共有5種:0 -- C-SVC(多類(lèi)別分類(lèi))
1 -- nu-SVC(多類(lèi)別分類(lèi))
2 -- one-class SVM(分布估計(jì))
3 -- epsilon-SVR(回歸)
4 -- nu-SVR(回歸)
-t : 核函數(shù)類(lèi)型,默認(rèn)第2種 一共有5種:0 -- 線性核(u'*v)
1 -- 多項(xiàng)式核((gamma*u'*v + coef0)^degree)
2 -- RBF核(exp(-gamma*|u-v|^2))
3 -- sigmoid核(tanh(gamma*u'*v + coef0))
4 -- precompute kernel(使用訓(xùn)練數(shù)據(jù)生成)
-d : degree,默認(rèn) 3-g :gamma,默認(rèn) 1/num_features-r :coef0,默認(rèn) 0-c :cost,針對(duì) C-SVC, epsilon-SVR, and nu-SVR,默認(rèn) 1-n :nu,針對(duì) nu-SVC, one-class SVM, and nu-SVR,默認(rèn) 0.5-p :e,設(shè)置epsilon-SVR中的 e,默認(rèn)0.1-m :cachesize,內(nèi)存大小,默認(rèn) 100MB-e : 終止條件的可容忍偏差,默認(rèn) 0.001-h :shrinking,是否使用啟發(fā)式,默認(rèn) 1-b :概率估計(jì),是否估計(jì)SVC或SVR的概率分布,默認(rèn)0-wi :weight,對(duì)各類(lèi)樣本的懲罰系數(shù)C加權(quán),默認(rèn) 1-v n :n-折 交叉驗(yàn)證模式,不會(huì)生成模型文件
調(diào)參
使用 libsvm 提供的 grid.py 實(shí)現(xiàn)自動(dòng)尋參
#適用于 分類(lèi)問(wèn)題 RBF核和線性核
python [options] grid.py datafile
預(yù)測(cè)
svm-predict [options] test_file model_file output_file
options:
-b :概率估計(jì),是否估計(jì)SVC或SVR的概率分布,默認(rèn)0
C/C++接口
工程里加入 libsvm 的 “svm.h”和“svm.cpp”即可
調(diào)用方法參考文件 “svm-scale.c”、“svm-train.c”和“svm-predict.c”
Python接口
參考“l(fā)ibsvm/python/README”
#通過(guò)文件讀取
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)
#輸入數(shù)據(jù)
# 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)
總結(jié)
以上是生活随笔為你收集整理的matlab的支持向量机调参,支持向量机(2)-应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php cms使用视频教程,PHPCMS
- 下一篇: php mysqli还原数据库,PHP