1

我想更好地瞭解如何我的特徵向量的值可能會影響結果。例如,假設我有一個最終值作爲結果下面的載體(這是使用SVC分類問題爲例):使用SVC偏差結果的特徵向量中的值可能非常大(或非常小)? [scikit學習]

0.713, -0.076, -0.921, 0.498, 2.526, 0.573, -1.117, 1.682, -1.918, 0.251, 0.376, 0.025291666666667, -200, 9, 1 

你會發現,大部分值中心的周圍0但是,有一個數值比-200更小。

我擔心這個數值會對預測產生偏差,並且由於價值差別太大而被加權得比其他數據重得不公平。

這是創建特徵向量時需要關注的東西嗎?或者我將使用統計測試來評估基於我提供的訓練集的這個大(或小)值的矢量控制? sci-kit中有沒有可用的方法專門學習,你會推薦標準化矢量?

謝謝你的幫助!

回答

1

是的,這是你應該被關注。 SVM在很大程度上受到任何特徵規模變化的影響,所以你需要順序預處理技術,使其不太可能,從最流行的:

  1. 線性重新調整各功能的層面,[0,1]或[-1,1]間隔
  2. 正常化每一個特徵尺寸,從而它已經平均= 0,方差= 1
  3. 去相關變換通過sigma^(-1/2)*X值,其中sigma = cov(X)(數據協方差矩陣)

每個人都可以使用scikit學習(儘管爲了實現第三個,你將需要爲矩陣平方根和反演SciPy的)

+0

嗨,謝謝你的回覆。我真的很感激這個意見。我嘗試了以下方法:我在scikit-learn上使用了這些方法來「規範化」我的訓練集和測試特徵向量:http://scikit-learn.org/0.11/modules/preprocessing.html。當我做一些測試時,我發現我的未被標準化的特徵向量比標準化的要好。你認爲這反映了我發現的結果是什麼? –

+0

如果一切都已經正確完成(你應該仔細檢查它,因爲它最可能的原因是一個錯誤),這將意味着你的不合理實際上有助於分類器做出正確的決定 - 所以這種偏見是由於缺乏標準化正在以「正確的方式」移動決策邊界。簡而言之 - 正常化不會執行,因爲它會保證更好的結果。它的執行是因爲我們假設我們不知道先驗哪些特徵更好,哪些更差 – lejlot

+2

@ T.S .:可能這個特徵是正確類的強預測者,而其餘特徵只是噪音。特徵選擇可能有助於消除無用功能。 –

1

我想更好地瞭解可以容易地進行我有多麼的特徵向量的值可能會影響結果。

然後這裏是你的數學。讓我們以線性內核爲例。它需要樣本x和支持向量sv,並計算它們之間的點積。點積的一個天真的Python實現將

def dot(x, sv): 
    return sum(x_i * sv_i for x_i, sv_i in zip(x, sv)) 

如果現在的一個特點有一個更極端的範圍比其他人(無論是在xsv,或者更糟的是,在這兩個),那麼與此特徵相對應的期限將支配總和。

類似的情況出現在多項式和RBF內核中。聚內核是線性核的僅僅一個(移位)功率:

def poly_kernel(x, sv, d, gamma): 
    return (dot(x, sv) + gamma) ** d 

和RBF核是xsv之間的距離的平方,乘以常數:

def rbf_kernel(x, sv, gamma): 
    diff = [x_i - sv_i for x_i, sv_i in zip(x, sv)] 
    return gamma * dot(diff, diff) 

在每在這些情況中,如果某個特徵具有極端範圍,則它將主導結果,而其他特徵將被有效忽略,除非打破關係。

scikit-learn工具來處理這個活在sklearn.preprocessing模塊:MinMaxScaler,StandardScaler,Normalizer

相關問題