国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
libsvm多分類模型文件解釋

FAQ of LIBSVM

(2006-03-22 09:10:52)

問: 已有哪些學(xué)校的課程應(yīng)用了libsvm?


德國弗賴堡大學(xué),計算機科學(xué)學(xué)院應(yīng)用科學(xué)系
數(shù)學(xué)與計算機科學(xué)部. Faculteit der Exacte Wetenschappen 荷蘭,自由大學(xué)(VU).
威斯康辛大學(xué)-麥迪遜分校,電子工程與計算機工程系
以色列,以色列理工學(xué)院.
佛羅里達州立大學(xué) 計算機與信息科學(xué)系.
肯尼亞,奈洛比大學(xué),計算機科學(xué)學(xué)院.
冰島大學(xué),應(yīng)用數(shù)學(xué)與計算機科學(xué)學(xué)院.
2005,芝加哥大學(xué),機器學(xué)習(xí)夏季學(xué)校,SVM課件.
[Go Top]


--------------------------------------------------------------------------------

問: 我在那里能夠找到libsvm的文件 ?


軟件包中有一個 README 文件,里面詳細(xì)說明了所有參數(shù)選項、數(shù)據(jù)格式以及庫函數(shù)的調(diào)用。在python目錄下,模型選擇工具和python界面的libsvm各有一個README文件。 初學(xué)者可以通過A practical guide to support vector classification 了解如何訓(xùn)練和檢驗數(shù)據(jù).論文LIBSVM : a library for support vector machines 詳細(xì)討論了libsvm的使用.

[Go Top]


--------------------------------------------------------------------------------

問: 以前版本的libsvm都有什么變化?


詳見變化日志.

你可以到這里下載以前版本的libsvm .

[Go Top]


--------------------------------------------------------------------------------

問: 如果我想引用libsvm, 我應(yīng)該引用哪篇論文?


請引用以下論文:

Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for support vector machines, 2001. Software available at http://www.csie.ntu.edu.tw/~cjlin/libsvm

bibtex格式如下:

@Manual{CC01a,
author =  {Chih-Chung Chang and Chih-Jen Lin},
title =  {{LIBSVM}: a library for support vector machines},
year =  {2001},
note =  {Software available at \url{http://www.csie.ntu.edu.tw/~cjlin/libsvm}}
}

[Go Top]


--------------------------------------------------------------------------------

問: 如果我想在我的軟件中應(yīng)用svm,是否存在軟件許可問題?


Libsvm許可文件 ("修改了的BSD許可文件") 和其他許多軟件的許可文件都是兼容的,如 GPL. 因此你很容易就可以把libsvm應(yīng)用到你的軟件中,你還可以將它應(yīng)用到商業(yè)產(chǎn)品中.

[Go Top]


--------------------------------------------------------------------------------

問: 是否有一系列基于libsvm的附加工具?


是的,詳見libsvm tools

[Go Top]


--------------------------------------------------------------------------------

問: 在Unix操作系統(tǒng)中, 出現(xiàn)了"error in loading shared libraries"(“在裝載共享庫時發(fā)生錯誤”)或者"cannot open shared object file."(無法打開共享目標(biāo)文件“) 這是為什么?


如果你在一臺機器上編譯代碼,然后到另外一臺有著不兼容庫的機器上運行,這種情況酒會經(jīng)常發(fā)生。你在那臺機器上可以重新編譯一下,或者用靜態(tài)連接。

[Go Top]


--------------------------------------------------------------------------------

問:修改源代碼后,如果想在MS窗口中建立一個“svm-toy”的圖形界面,我該怎么做?


你可以通過選擇 "Win32 Project"來建立一個工程。另外對于"svm-train"和 "svm-predict" ,你需要選擇"Win32 Console Project"。對于libsvm2.5以后的版本,你還可以通過Makefile.win來實現(xiàn)。詳見README。

如果你沒有用Makefile.win并出現(xiàn)了以下連接錯誤:

LIBCMTD.lib(wwincrt0.obj) : error LNK2001: unresolved external symbol
_wWinMain@16

那么,你很有可能是選擇了一個錯誤的工程類型。

[Go Top]


--------------------------------------------------------------------------------

問: 我是MS Windows用戶,在這些預(yù)編譯的exe文件中,為什么只有一個(SVM_toy)運行?


你應(yīng)當(dāng)打開命令窗口,然后輸入svmtrain.exe,這樣就可以在DOS窗口中看到所有的選項了。你可以到README文件中看到一些例子

[Go Top]


--------------------------------------------------------------------------------

問:為什么有時我在training/model 文件中看不到所有的數(shù)據(jù)屬性呢?W


libsvm應(yīng)用了所謂的”稀疏“格式,這樣零值就不用存儲了。例如,有下面屬性的數(shù)據(jù)

1 0 2 0

將被替換為:

1:1 3:2

[Go Top]


--------------------------------------------------------------------------------

問:如果我的數(shù)據(jù)是非數(shù)值型的,可以用libsvm嗎?


目前l(fā)ibsvm只支持?jǐn)?shù)值型的數(shù)據(jù)。因此,你必須將非數(shù)值型的轉(zhuǎn)為數(shù)值型的數(shù)據(jù)。比如,你可以用二進制屬性來替代原來的類別屬性。

[Go Top]


--------------------------------------------------------------------------------

問:為什么要采用稀疏格式呢? 密集數(shù)據(jù)在訓(xùn)練時候會不會很慢?


這是個具有爭議的話題。將系數(shù)向量賦值給核函數(shù)是比較慢的,因此總的訓(xùn)練時間至少是采用密集格式的2倍或3倍。 但是,我們不支持密集格式的數(shù)據(jù),因為我們不能夠處理極度稀疏的數(shù)據(jù)。代碼的簡潔也是我們考慮的一個因素。目前我們決定只支持稀疏格式的數(shù)據(jù)。

[Go Top]


--------------------------------------------------------------------------------

問: 訓(xùn)練C-SVM時,其輸出結(jié)果如下, 它們代表什么意思?

optimization finished, #iter = 219
nu = 0.431030
obj = -100.877286, rho = 0.424632
nSV = 132, nBSV = 107
Total nSV = 132

obj 是對偶SVM問題的最優(yōu)目標(biāo)值. rho 是判決函數(shù)sgn(w^Tx - rho)的偏項. nSV 和 nBSV 分別代表支持向量和邊界支持向量 (即alpha_i = C)的個數(shù). nu-svm 在某中程度上可以看作 C-SVM的等價形式,不過其中的 C被替換為 nu. nu 僅表明了相應(yīng)的參數(shù). 更詳細(xì)的解釋請看libsvm document.

[Go Top]


--------------------------------------------------------------------------------

問:關(guān)于模型文件,您能否解釋的更詳細(xì)一點?


在參數(shù)后面,每一條線代表一個支持向量。 支持向量按照先列出的標(biāo)簽列出(即類標(biāo)簽列表中,第一類的支持向量首先分組,然后依次類推)

如果k是類別的總數(shù),那么每個支持向量的前面就有k-1個y*alpha系數(shù),其中alpha代表如下二分類問題的對偶解:
1 vs j, 2 vs j, ..., j-1 vs j, j vs j+1, j vs j+2, ..., j vs k
并且在前j-1個系數(shù)中,y=+1, 其余的k-j個系數(shù)中y=-1.例如,對于4分類問題,文件看起來結(jié)構(gòu)如下:

+-+-+-+--------------------+
|1|1|1|                    |
|v|v|v|  類別1的支持向量  |
|2|3|4|                    |
+-+-+-+--------------------+
|1|2|2|                    |
|v|v|v|  類別2的支持向量 |
|2|3|4|                    |
+-+-+-+--------------------+
|1|2|3|                    |
|v|v|v|  類別3的支持向量  |
|3|3|4|                    |
+-+-+-+--------------------+
|1|2|3|                    |
|v|v|v|  類別4的支持向量  |
|4|4|4|                    |
+-+-+-+--------------------+

[Go Top]


--------------------------------------------------------------------------------

問: 在緩緩存中,是否可以用浮點型或者雙精度型來存儲數(shù)據(jù)?


當(dāng)你在緩存中存入更多的數(shù)據(jù)時,我們默認(rèn)的是浮點型.一般情況下,這樣就很好了,但是對于少數(shù)困難的情況(如C非常非常大)解將是巨大的數(shù)字。這時,僅用浮點型,數(shù)值的精度可能就不夠了。

[Go Top]


--------------------------------------------------------------------------------

問:怎樣選擇核函數(shù)?


通常我們建議你首先采用RBF核函數(shù)。Keerthi 和 Lin 的最近的研究( 下載論文) 表明如果模型選擇RBF的話,就沒有必要再考慮線性核函數(shù)了。采用sigmoid核函數(shù)的矩陣不一定會正有界,而且通常它的準(zhǔn)確性也不如RBF(可參見Lin和Lin的論文 此處下載). 多項式核函數(shù)還不錯,但是如果度數(shù)很高的話,數(shù)值困難就會發(fā)生(考慮到(<1)的d次冪會趨向0,(>1)的d次冪會趨向無窮)

[Go Top]


--------------------------------------------------------------------------------

問: libsvm是否可以用來專門處理線性SVM?D


不是的,目前l(fā)ibsvm用同樣的方法處理線性/非線性SVMs. 注意:如果采用線性核函數(shù),一些技巧可能會節(jié)省訓(xùn)練/檢驗的時間。 因此libsvm對線性SVM并不時特別有效,尤其是采用很大的C的問題,這些問題數(shù)據(jù)的數(shù)值比其屬性值要大得多。你可以:

僅用很大的C.下面的論文表明了:當(dāng)C大于一個確定的閥值以后,判決函數(shù)是相同的。
S. S. Keerthi and C.-J. Lin. Asymptotic behaviors of support vector machines with Gaussian kernel . Neural Computation, 15(2003), 1667-1689.

嘗試用bsvm, 它有個對解決線性SVMs很有效的方法.你可以在下面的研究中找到更詳細(xì)的內(nèi)容:
K.-M. Chung, W.-C. Kao, T. Sun, and C.-J. Lin. Decomposition Methods for Linear Support Vector Machines. Neural Computation, 16(2004), 1689-1704.

另外,你并沒必要一定要解決線性SVMs.你可以參考前面有關(guān)如何選取核函數(shù)的問題。

[Go Top]


--------------------------------------------------------------------------------

問: 自由支持向量特別大,我該怎么辦?


當(dāng)數(shù)據(jù)過擬和時,這種情況會經(jīng)常發(fā)生. 如果數(shù)據(jù)的屬性值范圍特別大,你可以嘗試調(diào)整它們的范圍。這樣合適參數(shù)的域可能會很大。注意:libsvm里包含有數(shù)據(jù)調(diào)整程序的,即svm_scale.

[Go Top]


--------------------------------------------------------------------------------

問: 我是否可以用同樣的方法來調(diào)整訓(xùn)練數(shù)據(jù)和檢驗數(shù)據(jù)的范圍?


是的, 可以按照以下方法:
svm-scale -s scaling_parameters train_data > scaled_train_data
svm-scale -r scaling_parameters test_data > scaled_test_data

[Go Top]


--------------------------------------------------------------------------------

問:將屬性值限制到[0,1],是否比限制到 [-1,1]有很大的不同?


對于線性規(guī)劃方法,如果采用可RBF核函數(shù)并進行了參數(shù)的選擇,兩者是沒什么不同的。假設(shè)Mi和mi分別代表第i個屬性的最大值和最小值.規(guī)劃到[0,1]即:

                x'=(x-mi)/(Mi-mi)

對于[-1 1]:

                x''=2(x-mi)/(Mi-mi)-1.

在RBF核函數(shù)中:

                x'-y'=(x-y)/(Mi-mi), x''-y''=2(x-y)/(Mi-mi).

因此在[0,1]數(shù)據(jù)規(guī)劃中用(C,g),和[-1 1]數(shù)據(jù)規(guī)劃中用(C,g/2)是一樣的。

盡管性能相同,但是計算機時間可能不同。對于有許多零入口的數(shù)據(jù), [0,1]規(guī)劃保持了輸入數(shù)據(jù)的稀疏特性,因此可能會節(jié)省計算時間。

[Go Top]


--------------------------------------------------------------------------------

問: 預(yù)測準(zhǔn)確率很低,應(yīng)該如何改進?


可以用python目下的grid.py來尋找合適的參數(shù),grid.py是一個用來選擇模型參數(shù)的工具。關(guān)于模型選擇的重要性,你可以參考我的談話: A practical guide to support vector classification

[Go Top]


--------------------------------------------------------------------------------

問: 我的數(shù)據(jù)是不平衡的,libsvm能解決這樣的問題嗎?


可以。libsvm有一個-wi選項。例如,你用:

svm-train -s 0 -c 10 -w1 1 -w-1 5 data_file

則對類別“-1”的懲罰就較大。注意-w選項僅用在C-SVC中。

[Go Top]


--------------------------------------------------------------------------------

問: nu-SVC和C-SVC有什么不同之處?
除了參數(shù)不同外,兩者基本是一樣的。C-SVC中,C的范圍是0到無窮,nu-SVC中C的范圍是[0 1]。 nu一個很好的特性是:它與支持向量的比率和訓(xùn)練誤差的比率相關(guān)。

[Go Top]


--------------------------------------------------------------------------------

問: 程序一直運行,但卻沒有輸出,應(yīng)該怎么辦?


你最好檢查一下數(shù)據(jù). 每一個訓(xùn)練/學(xué)習(xí)的數(shù)據(jù)都必須在一行,不可以分開。此外,你必須刪除空行。

[Go Top]


--------------------------------------------------------------------------------

問: 程序一直運行(有輸出,比如許多點)。應(yīng)該怎么辦?


從理論上講,如果核矩陣式半正定的,libsvm可以保證收斂。2.4以后版本的libsvm還可以處理非半正定矩陣核,比如sigmoid(tanh)核。這樣看來,你處理的情況是病態(tài)情況(比如參數(shù)過大或過?。?,這樣機會發(fā)生數(shù)值困難。

[Go Top]


--------------------------------------------------------------------------------

問: 訓(xùn)練時間太長,應(yīng)該怎么辦?


對于大型問題,請確保有足夠的緩存空間(即-m)。對于一些困難的情況(比如-c很大),會出現(xiàn)收斂很慢的情況. 你可以常識用一個較大點的終止可容忍偏差. 如果這樣仍然不行,你可以和我們聯(lián)系。我們會告訴你一些關(guān)于改善訓(xùn)練時間短小技巧。

[Go Top]


--------------------------------------------------------------------------------

問:我如何才能得到判決值?


對于回歸,程序可以打印出判決值。對于分類,可以通過解幾個二進制SVMs來實現(xiàn)多分類,因此你可以通過調(diào)用子程序svm_predict_values來實現(xiàn)輸出判決值。然后可以通過子程序svm_get_labels得到相應(yīng)的標(biāo)簽值。詳見軟件包中的README文件。

我們并不推薦以下操作,但是如果你要得到二分類的標(biāo)簽值+1和-1(注:這里的+1、-1和5、10的含義是不一樣的),你只要在svm.cpp文件中的 svm_predict_values(model, x, dec_values) 后面添加:printf("%f\n",dec_values[0]*model->label[0])就可以了。

正(負(fù))判決值對應(yīng)的值為+1(-1)

[Go Top]


--------------------------------------------------------------------------------

問:怎樣得到一個點到超平面的距離?


距離的表達式為: |decision_value| / |w|.我們有: |w|^2 = w^Tw = alpha^T Q alpha = 2*(dual_obj + sum alpha_i). 因此在svm.pp文件中,知道輸出對偶目標(biāo)值的語句,在后面加上打印輸出 w^Tw的語句就可以了.

[Go Top]


--------------------------------------------------------------------------------

問:在linux操作系統(tǒng)上,對于一些問題,如果用很大的緩存(即很大的-m),有時候會出現(xiàn)“段錯誤”("segmentation fault“),為什么?


在32位機器上,最大可設(shè)地址空間為4GB。Linux核將其分成3:1,即:用戶的空間為3GB,核空間為1G。盡管用戶有3GB的存儲空間,但是最大動態(tài)分配內(nèi)存只有2GB。因此如果你將-m設(shè)為2G,內(nèi)存將被耗盡。因此svm-train運行時候如果需要更多內(nèi)存,程序就無法運行。詳見此文.

有兩中方法可以解決這個問題。如果你的機器支持Intel的物理地址擴展,你可以在Linux核中起用HIGHMEM64G選項,這樣用戶和核都將分配到4G的空間. 此外, 你還可以使用`tub'軟件,它將為動態(tài)分配內(nèi)存 elimate the 2G boundary . `tub' 可以到http://www.bitwagon.com/tub.html下載.

[Go Top]


--------------------------------------------------------------------------------

問:: 怎樣才可以不讓svm-train 和svm-predict 在屏幕上輸出?


只要將svm.cpp中的:

#if 1
void info(char *fmt,...)

改為:

#if 0
void info(char *fmt,...)

[Go Top]


--------------------------------------------------------------------------------

問:我想用自己的核函數(shù),但我發(fā)現(xiàn)兩個核函數(shù)賦值子程序 k_function()和kernel_function().我應(yīng)該修改哪個?


我們采用兩個函數(shù)地原因是: 對于RBF核函數(shù)exp(-g |xi - xj|^2),如果我們先計算xi - xj然后平方,將有3n步操作.因此我們先考慮exp(-g (|xi|^2 - 2dot(xi,xj) +|xj|^2)),并先計算所有的|xi|^2,這樣計算步驟將減小到2vn。這是對于訓(xùn)練,但是對于預(yù)測我們不能這樣做,因此必須用一個有3n個步驟的常規(guī)子程序。如果你想使用自己的核函數(shù),最簡單的辦法是:用你核函數(shù)的代碼替換兩個子程序中的任何一個核函數(shù)的代碼。.

[Go Top]


--------------------------------------------------------------------------------

問:對于多分類SVM,libsvm采用的是什么方法 ? 為什么不用"1-against-the rest" 法 ?


對于多分類,我們采用的是1against 1法.我們的選擇建立在以下對比的基礎(chǔ)上: C.-W. Hsu and C.-J. Lin. A comparison of methods for multi-class support vector machines , IEEE Transactions on Neural Networks, 13(2002), 415-425.

"1agains1the rest"是個很好的方法,而且分類效果和"1-against-1."可以相比。但是我們采用后者,因為它訓(xùn)練的時間更短。

[Go Top]


--------------------------------------------------------------------------------

:做完交叉檢驗以后,為什么沒有模型文件輸出?


交叉檢驗只是為了尋找好的參數(shù),尋找完后,你必須在不用-v選項的情況下,重新訓(xùn)練整個數(shù)據(jù),才會得到模型文件。

[Go Top]


--------------------------------------------------------------------------------

問:對于交叉檢驗,我想使用隨機劃分,應(yīng)該如何操作?


如果你用的是 GNU C庫,默認(rèn)的種子是1.因此你在運行svm-train -v后,總是得到相同的結(jié)果. 想用不同的種子,你可在svm-train.c中添加如下代碼:

#include <time.h>

在子程序 do_cross_validation()的開始部分添加,

srand(time(0));

[Go Top]


--------------------------------------------------------------------------------

問:如果我想解決L2-svm 問題(即二次方誤差項). 我應(yīng)該怎樣修改代碼 ?


這十分簡單. 以c-svc為例, 在svm.cpp中只要修改兩個地方即可.

第一, 將solve_c_svc中的:

 s.Solve(l, SVC_Q(*prob,*param,y), minus_ones, y,
alpha, Cp, Cn, param->eps, si, param->shrinking);

修改為:

 s.Solve(l, SVC_Q(*prob,*param,y), minus_ones, y,
alpha, INF, INF, param->eps, si, param->shrinking);

第二:在SVC_Q類中, 聲明C為私有變量:

 double C;

在構(gòu)造(constructor)中,將它賦給param.C:

        this->C = param.C;

在子程序get_Q中, 在for循環(huán)之后,添加:

        if(i >= start && i < len)
data[i] += 1/C;

對于一分類svm,以上修改完全一樣。對于SVR,上面的if語句就沒有必要了,你只要用一個簡單的賦值語句即可:

 data[real_i] += 1/C;

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
SVM訓(xùn)練結(jié)果參數(shù)說明?訓(xùn)練參數(shù)說明?歸一化加快速度和提升準(zhǔn)確率?歸一化還原
研學(xué)論壇 - 【原創(chuàng)】LIBSVM的介紹與使用方法
svm及l(fā)ibsvm使用學(xué)習(xí)
Libsvm使用詳細(xì)說明
SVM基本概要與sklearn.svm.svc 參數(shù)說明
svm基本原理
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服