2013-10-01 70 views
0

你好,所有的機器學習專家,我對機器學習的主題很幼稚。我的數據有6個特徵(6個常規屬性)和2個標籤(1個特殊屬性)(true和false)(希望我使用了正確的術語)。我想結合那些必須由SVM訓練的功能。數據看起來像這樣: -支持向量機(SVM):通過訓練SVM結合每個參數的單獨分數

ZDis  ZAnch  ZSurf  Zval  ZDom  ZEntropy Top5 
0.48659 -0.20412 1.19243 0.15374 0.59667 1.34151 False 
-0.10067 4.89898 -0.73677 0.22506 0.59667 1.34151 True 
2.24837 -0.20412 -2.02291 0.22455 0.59667 1.34151 False 
0.48659 -0.20412 1.19243 -0.06352 0.59667 1.34151 False 
-0.68793 -0.20412 1.19243 0.12405 0.59667 1.34151 False 
-2.02698 -0.40825 1.86371 0.07348 1.3272 -0.1242 False 
-0.1807 2.44949 0.17865 0.07345 0.9401 0.1505 False 
1.66557 2.44949 -1.50641 0.07381 0.9401 1.30135 False 
1.11169 -0.40825 0.34716 0.07381 0.9401 -0.20225 True 
1.5337 -0.40825 -0.01393 0.07381 -0.9954 0.53144 False 
-0.01945 -0.48348 -1.16128 0.11035 2.02339 0.90237 False 
-1.52944 3.23556 0.23428 0.11093 1.22613 -0.12973 False 
0.43354 -0.48348 -2.20795 0.11093 1.22613 2.25734 False 
2.84953 -0.48348 -2.20795 0.11093 1.49189 3.07609 True 

所以我想在這裏做總= X1 * ZDis + X2 * ZAnch + X3 * ZSurf + X4 * ZVAL + X5 * ZDom + X6 * ZEntropy 其中X1..X6是應該來自SVM的加權值。我用rapidminner來讓我的訓練集和結果的40例這樣的重量值低於: -

Total number of Support Vectors: 40 
Bias (offset): -1.055 
w[ZDis] = 0.076 
w[ZAnch] = -0.058 
w[ZSurf] = 0.057 
w[Zval] = 0.010 
w[ZDom] = 0.073 
w[ZEntropy] = 0.077 

我不知道我做了正確的做法還是不那麼我需要你的幫助。提前致謝。另外如果有人指導我如何在Python中編寫這個SVM問題的代碼,這對我也會有所幫助。

感謝 Pallab


從你得到的反饋之後,我又做了一些分析,我的問題,我在那裏有277個數據集和8是積極的,269是具有八大特點負的,因此它顯示我清楚,它的不平衡數據集。正如我之前所說的,我想通過使用SVM權重來使用SVM來同樣重視我的所有特徵,然後想要做(w1*x1+w2*x2+...+w8*x8),這將幫助我從我的數據集中提取真實結果。數據是這樣的: -

`NameOfMotif eval_Zscore dis_Zscore abind_Zscore surf_Zscore pfam_Zscore ptm_Zscore coil_Zscore entropy_Zscore TrueVsFalse 
ptk_9 0.77428 0.2387 -0.39736 1.48274 0.61237 -0.21822 0.49111 0.44599 False 
ptk_8 0.77494 -0.97317 -0.39736 -0.27357 -1.63299 -0.21822 0.6181 -0.04028 False 
ptk_3 0.77591 1.45058 -0.39736 -0.1139 0.61237 4.58258 0.74509 -0.85069 True 
ptk_6 0.77583 -2.18505 -0.39736 -0.27357 0.61237 -0.21822 -0.3343 -0.92281 False 
ptk_22 0.55932 1.45058 -0.39736 0.70216 0.61237 -0.21822 1.25303 -2.17556 False 
ptk_23 0.51159 -0.97317 -0.39736 1.05697 -1.63299 -0.21822 1.25303 0.77021 False 
ptk_20 0.62907 0.2387 -0.39736 1.05697 0.61237 -0.21822 -0.22848 -1.21702 False 
.............................................................................. 
scf-trcp1_1 0.17425 2.23675 -0.92125 -0.03478 1.20877 5.13288 1.31262 2.27655 True 
scf-trcp1_3 0.17425 -1.068 -0.92125 -0.82472 -2.43745 -0.43743 0.48341 -0.59339 False 
scf-trcp1_5 0.17425 0.41914 0.24523 -1.05041 0.23644 -0.43743 -0.02919 1.68523 False 
scf-trcp1_7 0.17425 -1.63453 -0.92125 -1.25354 -1.82975 -0.43743 -2.0193 0.95051 False` 

和我的SVM了賣出期權

kernel type polynomial 
cross fold validation =5 
c=100000.0 
kernal degree = 1.0E-4 
L-pos =2.0 
L-neg =2.0 
PerformanceVector: 
accuracy: 84.60% +/- 23.58% (mikro: 84.48%) 
ConfusionMatrix: 
True: False True 
False: 228 2 
True: 41 6 
precision: 31.08% +/- 25.51% (mikro: 12.77%) (positive class: True) 
ConfusionMatrix: 
True: False True 
False: 228 2 
True: 41 6 
recall: 70.00% +/- 40.00% (mikro: 75.00%) (positive class: True) 
ConfusionMatrix: 
True: False True 
False: 228 2 
True: 41 6 
AUC (optimistic): 0.793 +/- 0.184 (mikro: 0.793) (positive class: True) 
AUC: 0.793 +/- 0.184 (mikro: 0.793) (positive class: True) 
AUC (pessimistic): 0.793 +/- 0.184 (mikro: 0.793) (positive class: True) 

我的問題是在這裏,我的做法是不夠好了嗎?我用來優化SVM的所有參數都很好?我在這個問題上非常天真! 感謝 Pallab

+0

爲什麼你不確定這是否是正確的方法?您是否在測試數據上測試了您的參數? –

+0

我檢查了我的測試數據,特別是從我的訓練集(現在只包含35個示例)中取出了5個示例,其中測試集中4個爲假,1個爲真,但rapisminner給我5個假結果! – Paul85

回答

0

您使用的是線性模型,假設存在一組參數,這將使你通過簡單的計算sign(w1*x1+w2*x2+...+w5*x5 - b)答案。對於低維空間,這種假設很少出現。在你的特定例子中,你只有5個維度和非常小的訓練集。女巫這樣的小數據 - 幾乎沒有機會,任何機器學習方法都會取得好成績,因爲它們都是統計方法統計。很難談及30個元素的統計。

要提問:

  • 爲了試驗這個在python,看看scikit-learn
  • 要測試你的模型進行交叉驗證 - 將數據分成例如5塊(每7個例子),然後在4個這樣的塊(28分)上訓練SVM,然後測試其餘的1塊(7分),重複5次,因此每個塊只用一次作爲測試。計算得到的精度的平均值
  • 要處理低維非線性可分數據,請嘗試使用類似於多項式(具有小程度)的其他內核,或者如果它不起作用 - RBF,請嘗試使用其他內核。
  • 請記住,SVM是參數模型。你必須選擇正確的參數,以獲得良好的結果。線性SVM需要C參數 - C越大,「強制」SVM越能夠正確分類數據(將錯誤分類的數量最小化)。當使用內核時 - 你會得到另一個參數(所以除了C你得到d多項式和gamma在rbf中)。數據標準化 - 衆所周知,很多ML模型(包括SVM)可以在數據上執行嚴格的數據,這些數據標準化可以通過網格搜索來執行(scikit-learn有自動執行此操作的例程,可以讀取文檔)
  • 每個特徵有不同的比例 - 似乎它是你的情況(Zval似乎比Zentropy小得多) - 爲了避免特徵偏差,你應該將它們重新縮放到例如[-1,1]的間隔,或者歸一化,因此每個都具有0和方差1
+0

感謝您提供有用的信息,現在我將嘗試在我的問題中實現您的想法 – Paul85

0

你提到,通過持有5條記錄,你獲得了5個錯誤的分類,其中4個是正確的,1個是錯誤的。這還不足以知道模型是否有用。正如前面的答案所述,通過進行交叉驗證(RapidMiner運算符稱爲X驗證)來估計SVM對未見數據的性能。這會讓你看到該模型是否有任何價值。爲了將參數調整到SVM運算符以改進模型,請使用循環參數運算符並將其與交叉驗證組合以獲得估計的性能。