svmc語言
1. svm的輸入和輸出問題
你好,LIBSVM簡介 [.v5o#Vd
sH:Luo+]
支持向量機所涉及到的數學知識對一般的化學研究者來說是比較難的,自己編程實現該演算法難度就更大了。但是現在的網路資源非常發達,而且國際上的科學研究者把他們的研究成果已經放在網路上,免費提供給用於研究目的,這樣方便大多數的研究者,不必要花費大量的時間理解SVM演算法的深奧數學原理和計算機程序設計。目前有關SVM計算的相關軟體有很多,如LIBSVM、mySVM、SVMLight等,這些軟體大部分的免費下載地址和簡單介紹都可以在[url]
http://www.kernel-machines.org/[/url]上獲得。 pq2j j.XL7m4B
LIBSVM是台灣大學林智仁(Lin Chih-Jen)副教授等開發設計的一個簡單、易於使用和快速有效的SVM模式識別與回歸的軟體包,他不但提供了編譯好的可在Windows系列系統的執行文件,還提供了源代碼,方便改進、修改以及在其它操作系統上應用;該軟體還有一個特點,就是對SVM所涉及的參數調節相對比較少,提供了很多的默認參數,利用這些默認參數就可以解決很多問題;並且提供了交互檢驗(Cross Validation)的功能。該軟體包可以在[url]
http://www.csie.ntu.e.tw/~cjlin/[/url]免費獲得。該軟體可以解決C-SVM分類、-SVM分類、-SVM回歸和-SVM回歸等問題,包括基於一對一演算法的多類模式識別問題。在第2章中我們也介紹了該軟體的一些優點,因此通過綜合考慮,我們決定採用該軟體作為工作軟體。SVM用於模式識別或回歸時,SVM方法及其參數、核函數及其參數的選擇,目前國際上還沒有形成一個統一的模式,也就是說最優SVM演算法參數選擇還只能是憑借經驗、實驗對比、大范圍的搜尋或者利用軟體包提供的交互檢驗功能進行尋優。
4lE qC iC mt'j?)FN"b
LIBSVM使用方法 p-t8\q9P!e(jVL6e
1XP6S+YzWZ LibSVM是以源代碼和可執行文件兩種方式給出的。如果是Windows系列操作系統,可以直接使用軟體包提供的程序,也可以進行修改編譯;如果是Unix類系統,必須自己編譯,軟體包中提供了編譯格式文件,我們在SGI工作站(操作系統IRIX6.5)上,使用免費編譯器GNU C++3.3編譯通過。 |U4E P})T/u
8rur3[8U.zeQ9VX
LIBSVM使用的數據格式 W2}&p]lU
該軟體使用的訓練數據和檢驗數據文件格式如下: x4Vy\ G1y6g\3~
<label> <index1>:<value1> <index2>:<value2> ...
6a X)I&x9l@4cU {2q 其中<label> 是訓練數據集的目標值,對於分類,它是標識某類的整數(支持多個類);對於回歸,是任意實數。<index> 是以1開始的整數,可以是不連續的;<value>為實數,也就是我們常說的自變數。檢驗數據文件中的label只用於計算準確度或誤差,如果它是未知的,只需用一個數填寫這一欄,也可以空著不填。在程序包中,還包括有一個訓練數據實例:heart_scale,方便參考數據文件格式以及練習使用軟體。
H'?-]1a%HC Us 可以編寫小程序,將自己常用的數據格式轉換成這種格式
"pm2M;L7E{~5t
mLf \*?8n"x9A Svmtrain和Svmpredict的用法
g Ddk2C-Cd LIBSVM軟體提供的各種功能都是DOS命令執行方式。我們主要用到兩個程序,svmtrain(訓練建模)和svmpredict(使用已有的模型進行預測),下面分別對這兩個程序的使用方法、各參數的意義以及設置方法做一個簡單介紹:
8x*l/L/E0b Svmtrain的用法:svmtrain [options] training_set_file [model_file] U1NjN e f%W}0R
Options:可用的選項即表示的涵義如下
'fH*{2_5u -s svm類型:SVM設置類型(默認0)
_`"JB+i@9~ 0 -- C-SVC O)Z5y$E$c#Cy
1 --v-SVC
MQL(d;t 2 – 一類SVM
$E(@D ShN 3 -- e -SVR
] K ]V~b+t0}2Gl 4 -- v-SVR
J0j5|rJ[ -t 核函數類型:核函數設置類型(默認2)
,pvvLy O 0 – 線性:u'v Cj-AB;jn8Cbk
1 – 多項式:(r*u'v + coef0)^degree 7nq{|q*] @1{3T
2 – RBF函數:exp(-r|u-v|^2) o4S JB-zV2P%?,C
3 –sigmoid:tanh(r*u'v + coef0) \"m w._)u|,Bu4C
-d degree:核函數中的degree設置(默認3) K0?8R!fR;g+W2k
-g r(gama):核函數中的函數設置(默認1/ k) :u6r%p*o$QG
-r coef0:核函數中的coef0設置(默認0) &xO&LjbX(y
-c cost:設置C-SVC, -SVR和-SVR的參數(默認1) Y:N.Jv8v
-n nu:設置-SVC,一類SVM和- SVR的參數(默認0.5)
;r:h%XN2HH6Bf -p e:設置 -SVR 中損失函數的值(默認0.1) sW'o.m-R7]
-m cachesize:設置cache內存大小,以MB為單位(默認40)
:K ^*y[BE7]\7U -e :設置允許的終止判據(默認0.001) )rI#@C7F5Q Rw,J R']Vz{
-h shrinking:是否使用啟發式,0或1(默認1) "|g6wfu
-wi weight:設置第幾類的參數C為weightC(C-SVC中的C)(默認1)
4Rf W-~|oY] -v n: n-fold交互檢驗模式 Js}7ee&n\{c
其中-g選項中的k是指輸入數據中的屬性數。option -v 隨機地將數據剖分為n部分並計算交互檢驗准確度和均方根誤差。以上這些參數設置可以按照SVM的類型和核函數所支持的參數進行任意組合,如果設置的參數在函數或SVM類型中沒有也不會產生影響,程序不會接受該參數;如果應有的參數設置不正確,參數將採用默認值。training_set_file是要進行訓練的數據集;model_file是訓練結束後產生的模型文件,文件中包括支持向量樣本數、支持向量樣本以及lagrange系數等必須的參數;該參數如果不設置將採用默認的文件名,也可以設置成自己慣用的文件名。 E M%WTF
Svmpredict的用法:svmpredict test_file model_file output_file 1bv R [?d
model_file是由svmtrain產生的模型文件;test_file是要進行預測的數據文件;Output_file是svmpredict的輸出文件。svm-predict沒有其它的選項。 FOiJEO4vsVo#Q
Sx$^&O+K7I@-V;z(M svmtrain -s 0 -c 1000 -t 1 -g 1 -r 1 -d 3 data_file VAHQ!cm+b*Q)t U
訓練一個由多項式核(u'v+1)^3和C=1000組成的分類器。 u:p+jD5q"Pr
svmtrain -s 1 -n 0.1 -t 2 -g 0.5 -e 0.00001 data_file
JxJ&A.J8n t/D*[+Kd 在RBF核函數exp(-0.5|u-v|^2)和終止允許限0.00001的條件下,訓練一個-SVM ( = 0.1)分類器。
9P |4Q'xM}7mo[K!T svmtrain -s 3 -p 0.1 -t 0 -c 10 data_file
1| A {;}9R{+qI 以線性核函數u'v和C=10及損失函數= 0.1求解SVM回歸。;^ 27118希望對你有幫助!
2. SVM最初開發語言是
SVM分類演算法的實驗報告,其中有c語言程序,還有數據集很全面。是數據挖掘、演算法設計實驗報告的絕佳參考svm演算法c語言更多下載資源
3. 學習神經網路、SVM等機器學習的知識,為了更好的投入到應用當中,用matlab還是c++好呢
一般都是用MATLAB和python吧,用C++做機器學習有點太麻煩了。MATLAB和python就方便的
4. 支持向量機(SVM)中的參數C和gamma代表什麼含義呢
C是懲罰系數,理解為調節優化方向中兩個指標(間隔大小,分類准確度)偏好的權重,即對誤差的寬容度,C越高,說明越不能容忍出現誤差,容易過擬合,C越小,容易欠擬合,C過大或過小,泛化能力變差。
gamma是選擇RBF函數作為kernel後,該函數自帶的一個參數。隱含地決定了數據映射到新的特徵空間後的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的個數影響訓練與預測的速度。
(4)svmc語言擴展閱讀:
1、支持向量機(Support Vector Machine, SVM)是一類按監督學習方式對數據進行二元分類的廣義線性分類器其決策邊界是對學習樣本求解的最大邊距超平面。
2、SVM使用鉸鏈損失函數計算經驗風險並在求解系統中加入了正則化項以優化結構風險,是一個具有稀疏性和穩健性的分類器。SVM可以通過核方法進行非線性分類,是常見的核學習方法之一。
5. 有沒有用c或c++實現svm演算法
林智仁 的libsvm 就是C實現的SVM演算法代碼,回答不能帶鏈接,你去搜一下libsvm就能找到了.你可以找到他的主頁,上面還會有演算法的具體介紹,和libsvm的使用. 這個估計是使用最廣泛的求解svm的工具包. 裡面的代碼都是可以看的.
理論的話,july寫的一篇文章很經典, 搜索 支持向量機通俗導論(理解SVM的三層境界) 就能找到.
另外看樓主是想學習人工智慧演算法的, 附加一個學習神經網路的網路, <神經網路之家> nnetinfo ,專講神經網路的,還有相關視頻.
都是本人學習過程了解到的干貨, 望採納.
6. SVM如何調節懲罰因子C並輸出分類結果圖像
CvSVMParams::CvSVMParams() :
svm_type(CvSVM::C_SVC), kernel_type(CvSVM::RBF), degree(0),
gamma(1), coef0(0), C(1), nu(0), p(0), class_weights(0)
SVM種類:CvSVM::C_SVC C_SVC該類型可以用於n-類分類問題 (n>=2),其重要特徵是它可以處理非完美分類
的問題 (及訓練數據不可以完全的線性分割)。它是最常被使用的SVM類型。
CvSVM::C_SVC - n(n>=2)分類器,允許用異常值懲罰因子C進行不完全分類。
CvSVM::NU_SVC - n類似然不完全分類的分類器。參數nu取代了c,其值在區間【0,1】中,nu越大,決策邊界越平滑。
CvSVM::ONE_CLASS - 單分類器,所有的訓練數據提取自同一個類里,然後SVM建立了一個分界線以分割該類在特徵空間中所佔區域和其它類在特徵空間中所佔區域。
CvSVM::EPS_SVR - 回歸。 訓練集中的特徵向量和擬合出來的超平面的距離需要小於p。異常值懲罰因子C被採用。
CvSVM::NU_SVR - 回歸;nu 代替了p
Kernel的種類:
CvSVM::LINEAR - 表示不需要進行映射,沒有任何向映射至高維空間,線性區分(或回歸)在原始特徵空間中被完成,這是最快的選擇。 d(x,y) = x?y == (x,y)
CvSVM::POLY - 多項式核: d(x,y) = (gamma*(x?y)+coef0)degree
CvSVM::RBF - 徑向基,對於大多數情況都是一個較好的選擇:d(x,y) = exp(-gamma*|x-y|2)
CvSVM::SIGMOID - sigmoid函數被用作核函數: d(x,y) = tanh(gamma*(x?y)+coef0)
CvSVM::RBF,貌似比 CvSVM::LINER 正確率高
degree:內核函數(POLY)的參數degree。
10.0(此次不使用)
gamma:內核函數(POLY/ RBF/ SIGMOID)的參數\gamma。
8.0
coef0:內核函數(POLY/ SIGMOID)的參數coef0
1.0(此次不使用)
C: Cvalue – SVM類型(C_SVC/ EPS_SVR/ NU_SVR)的參數C。
10.0
nu: SVM類型(NU_SVC/ ONE_CLASS/ NU_SVR)的參數 \nu。
0.5(此次不使用)
p:SVM類型(EPS_SVR)的參數 \epsilon。
0.1(此次不使用)
class_weights: – C_SVC中的可選權重,賦給指定的類,乘以C以後變成 class_weight_si * C。所以這些權重影響不同類別的錯誤分類懲罰項。權重越大,某一類別的誤分類數據的懲罰項就越大。
term_crit: – SVM的迭代訓練過程的中止條件,解決部分受約束二次最優問題。您可以指定的公差和/或最大迭代次數。
然後對訓練數據正規化處理,並放在CvMat型的數組里。
7. svm能用字元型變數嗎
字元型變數是用來保存單字元的一種變數:如:char a='a'; 而字元串就是用來保佑多個字元的變數,C語言中用字元數組來表式一個字元串 如:char name[]={"abcdefghikllllll"}。字元和字元串的區別在於是用雙引號,還是單引號,雙引號表字元串,單引號表字元,如:"a"和'a' 第一個是字元串,而第二個是字元。
8. svm支持向量集可以用c實現么
用LIBSVM工具箱,它是由台灣大學林智仁(Chih-Jen Lin)等開發和設計的,它是一個簡單、易於使用並且快速有效的SVM軟體工具包,可以解決C-支持向量分類(C-SVC)、v-支持向量分類(v-SVC)、分布估計(one-class SVM)、e-支持向量回歸
9. 求助 。。。libsvm 如何在vc下編寫程序
libsvm是一個開源的軟體,如果你想直接用svm,裡面有編譯好的可執行文件,有多種版本;如果你想修改代碼,可以將windows子目錄下的C++和C程序建一個工程,再根據你自己的研究內容修改即可。
10. 為什麼林志仁的svm識別快、matlab自帶的svm慢哪位大神講解一下吧。
一個是C語言編寫的,一個用腳本語言編寫的,速度肯定不同。
基本上C語言是所有語言中最快的,僅次於匯編。