天天看點

libsvm所用資料格式

所有關于libsvm2.9的前期工作準備好以後,就必須考慮将自己的資料轉換為libsvm對應的格式來做分類驗證的問題

訓練與測試資料檔案的格式如下所示

<label> <index1>:<value1> <index2>:<value2>…

.

.

.

每行包含一個執行個體,并且以字元’\n’結束。對于分類來講,<label>是整型資料,表示類别(支援多分類)。對于回歸來講,<label>是任意實數(浮點數),表示目标值。one-class SVM并不使用這個參數,是以使用什麼數值都可以。除非使用預計算好的核心(稍候章節介紹),否則<index>:<value>是描述屬性值的。<index>(索引)是從1開始的整型資料,而<value>(值)是實數(浮點型)。索引必須升序排列。在測試檔案中的标簽隻是用于計算精确度或錯誤率。如果它們是未知的,那麼隻要将第一列賦任意數值

本包含有一個用于分類的示例資料檔案,檔案名是“heart_scale”。要驗證你的資料格式的正确性,請使用“tools/checkdata.py”工具(詳見檔案“tools/README”)。

鍵入“svm-train heart_scale”,程式會讀讀入訓練資料并生成模型檔案“heart_scale.model”。假設你有一個名為“heart_scale.t”的測試集,那麼鍵入“svm-predict heart_scale.t heart_scale.model output”以測試預測精确度。檔案“output”中含有預測的分類标簽。

本包中還有一些别的實用程式:

1.svm-scale(對資料進行歸一化):

将輸入資料數值化的工具。

用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper] [-s save_filename] [-r restore_filename] filename (預設值: lower = -1,upper = 1,沒有對y進行縮放) 其中:

-l:資料下限标記;lower:縮放後資料下限;

-u:資料上限标記;upper:縮放後資料上限;

-y:是否對目标值同時進行縮放;y_lower為下限值,y_upper為上限值;(回歸需要對目标進行縮放,是以該參數可以設定為 –y -1 1 )

-s save_filename:表示将縮放的規則儲存為檔案save_filename;

-r restore_filename:表示将縮放規則檔案restore_filename載入後按此縮放; f

ilename:待縮放的資料檔案(要求滿足前面所述的格式)。

縮放規則檔案可以用文本浏覽器打開,看到其格式為:

y

lower upper min max 

lower upper

index1 min1 max1

index2 min2 max2

„„ 其中的lower 與upper 與使用時所設定的lower 與upper 含義相同;index 表 示特征序号;min 轉換前該特征的最小值;max 轉換前該特征的最大值。

資料集的縮放結果在此情況下通過DOS視窗輸出,當然也可以通過DOS的檔案重定向符号“>”将結果另存為指定的檔案。

例:原始檔案AORG,用svm-scale歸一化:svm-scale AORG >AORG.scale

該檔案中的參數可用于最後面對目标值的反歸一化。反歸一化的公式為:

(Value-lower)*(max-min)/(upper – lower)+lower

其中value為歸一化後的值,其他參數與前面介紹的相同。

建議将訓練資料集與測試資料集放在同一個文本檔案中一起歸一化,然後再将歸一化結果分成訓練集和測試集。

2.svmtrain(訓練資料,生成模型):

用法: svmtrain [options] training_set_file [model_file]

其中, options(操作參數):可用的選項即表示的涵義如下所示 -s svm類型:設定SVM 類型,預設值為0,可選類型有(對于回歸隻能選3或4):

0 — C- SVC 1 — n – SVC 2 — one-class-SVM 3 — e – SVR 4 — n – SVR -t 核函數類型:設定核函數類型,預設值為2,可選類型有: 0 — 線性核:u’*v 1 — 多項式核: (g*u’*v+ coef 0)deg ree 2 — RBF 核:e( u v 2) g – 3 — sigmoid 核:tanh(g*u’*v+ coef 0) -d degree:核函數中的degree設定,預設值為3;

-g g :設定核函數中的g ,預設值為1/ k ; -r coef 0:設定核函數中的coef 0,預設值為0; -c cost:設定C- SVC、e – SVR、n – SVR中從懲罰系數C,預設值為1; -n n :設定n – SVC、one-class-SVM 與n – SVR 中參數n ,預設值0.5; -p e :設定n – SVR的損失函數中的e ,預設值為0.1; -m cachesize:設定cache記憶體大小,以MB為機關,預設值為40; -e e :設定終止準則中的可容忍偏差,預設值為0.001; -h shrinking:是否使用啟發式,可選值為0 或1,預設值為1; -b 機率估計:是否計算SVC或SVR的機率估計,可選值0 或1,預設0; -wi weight:對各類樣本的懲罰系數C權重,預設值為1; -v n:n折交叉驗證模式。

其中-g選項中的k是指輸入資料中的屬性數。操作參數 -v 随機地将資料剖分為n 部分并計算交叉檢驗準确度和均方根誤差。以上這些參數設定可以按照SVM 的類型和核函數所支援的參數進行任意組合,如果設定的參數在函數或SVM 類型中沒有也不會産生影響,程式不會接受該參數;如果應有的參數設定不正确,參數将采用預設值。training_set_file是要進行訓練的資料集;model_file是訓練結束後産生的模型檔案,該參數如果不設定将采用預設的檔案名,也可以設定成自己慣用的檔案名。

本實驗中的參數-s取3,-t取2(預設)還需确定的參數是-c,-g,-p

另, 實驗中所需調整的重要參數是-c 和 –g,-c和-g的調整除了自己根據經驗試之外,還可以使用gridregression.py 對這兩個參數進行優化。(需要補充)

該優化過程需要用到Python(2.5),Gnuplot(4.2),gridregression.py(該檔案需要修改路徑)。

然後在指令行下面運作:

python.exe gridregression.py -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -s 3 –t 2 -v 5 -svmtrain E:\libsvm\libsvm-2.86\windows\svm-train.exe -gnuplot E:\libsvm\libsvm-2.86\gnuplot\bin\pgnuplot.exe E:\libsvm\libsvm-2.86\windows\train.txt > gridregression_feature.parameter

以上三個路徑根據實際安裝情況進行修改。

-log2c是給出參數c的範圍和步長 -log2g是給出參數g的範圍和步長 -log2p是給出參數p的範圍和步長上面三個參數可以用預設範圍和步長 -s選擇SVM類型,也是隻能選3或者4 -t是選擇核函數 -v 10 将訓練資料分成10份做交叉驗證。預設為5

為了友善将gridregression.py是存放在python.exe安裝目錄下

trian.txt為訓練資料,參數存放在gridregression_feature.parameter中,可以自己命名。

搜尋結束後可以在gridregression_feature.parameter中最後一行看到最優參數。

其中,最後一行的第一個參數即為-c,第二個為-g,第三個為-p,最後一個參數為均方誤差。前三個參數可以直接用于模型的訓練。

然後,根據搜尋得到的參數,重新訓練,得到模型。

3.svm-predict(測試):

用法:svmpredict [options] test_file model_file output_file options(操作參數): -b probability_estimates:是否需要進行機率估計預測,可選值為0 或者1,預設值為0。 model_file 是由svmtrain 産生的模型檔案;

test_file 是要進行預測的資料檔案;

output_file 是svmpredict 的輸出檔案,表示預測的結果值。

輸出結果包括均方誤差(Mean squared error)和相關系數(Squared correlation coefficient)。

4.svm-toy:

簡單的圖形界面工具,它可以展示支援向量機怎樣在二維空間(即平面)上将資料分類。你可以在該視窗上面單擊以繪制資料點。使用“change”按鈕來選擇類别1,2或3(也就是說,最多支援三類),按“load”按鈕可以從檔案載入資料,按“save”按鈕可以将資料儲存到檔案,按“run”按鈕可以獲得一個SVM模型(根據繪制的點集或從檔案載入的資料),按“clear”按鈕可以清屏。

在該視窗的底部文本框内,你可以輸入參數,參數的句法和“svm-train”一樣。

注意:“load”和“save”隻考慮資料分類而不考慮回歸的情況。每個資料點擁有一個标簽(顔色,必須是1,2或3)和兩個屬性(橫坐标和縱座标),取值區間[0,1]。

來源http://www.cnphp.info/libsvm2-9-data-format.html

繼續閱讀