2016-11-10 150 views
1

對於不同比例的輸入數據,我明白用於訓練分類器的值必須針對正確分類(SVM)進行歸一化。是否需要對SVM中預測的輸入向量進行歸一化?

那麼預測的輸入向量也需要歸一化嗎?

我的場景是訓練數據被規範化並序列化並保存在數據庫中,當必須完成預測時,序列化的數據被反序列化以獲得規範化的numpy數組,然後numpy數組適合在分類器上並且用於預測的輸入向量被應用於預測。那麼這個輸入向量是否也需要進行歸一化?如果是這樣,怎麼做,因爲在預測時我沒有實際的輸入訓練數據來正常化?

此外,我正在沿軸= 0,即沿着列正常化。

我正火的代碼是:

preprocessing.normalize(data, norm='l2',axis=0) 

有建議定標器有幾個原因的方式來序列preprocessing.normalize

+0

如果您之前SVM的訓練進行預處理,那麼你當然要預處理每到預測矢量也以相同的預處理器對象(例如同樣的意思)用於訓練。 – sascha

+0

所以,我要序列化sklearn中的規範器以便規範化輸入向量。 –

回答

1

在支持向量機。

  • 在許多優化方法中最好具有相同的比例尺。
  • 許多核函數在內部使用歐幾里德距離來比較兩個不同的採樣(在高斯核中,歐幾里得距離處於指數項),如果每個特徵具有不同的比例,歐幾里得距離僅考慮具有最高規模。

當您將這些功能放在相同的比例尺中時,您必須刪除平均值併除以標準偏差。

 xi - mi 
xi -> ------------ 
     sigmai 

您必須存儲訓練集中每個要素的均值和標準差,以便在將來的數據中使用相同的操作。

在Python有函數來爲你做的:

http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html

要獲取手段和STANDAR偏差:

scaler = preprocessing.StandardScaler().fit(X) 

爲了標準化,然後訓練集(X是一個矩陣,其中每行是數據,每列都有一個特徵):

X = scaler.transform(X) 

培訓結束後,必須分級前正常化未來的數據:

newData = scaler.transform(newData)