2013-12-10 83 views
7

我一直在玩一些支持向量機的實現,我想知道什麼是規範化特徵值以適應一個範圍的最佳方法? (從0到1)正常化SVM的特徵值

讓我們假設我在範圍3個特徵與值:

  1. 3 - 5

  2. 0.02 - 0.05

  3. 10-15。

如何將所有這些值轉換爲[0,1]的範圍?

如果在訓練過程中,我遇到的特徵編號1的最大值是5,並且在我開始在更大的數據集上使用我的模型後,我會偶然發現高達7的值?然後在轉換後的範圍內,它會超過1 ...

如何在訓練過程中對值進行歸一化,以說明「野外值」超過模型「看到」期間最高(或最低)值的可能性訓練?模型如何對此作出反應,以及如何在發生這種情況時使其正常工作?

回答

7

通過將矢量轉換爲單位矢量來規格化矢量。這將根據特徵的相對值來訓練SVM,而不是幅度。歸一化算法將對具有任何值的向量起作用。

要轉換爲單位矢量,divide each value by the length of the vector。例如,[4 0.02 12]的矢量長度爲12.6491。歸一化的矢量然後是[4/12.6491 0.02/12.6491 12/12.6491] = [0.316 0.0016 0.949]

如果「在野外」我們遇到了一個向量[400 2 1200],它將歸一化爲與上面相同的單位向量。這些特徵的幅度通過歸一化「抵消」,並且我們留下相對值在0和1之間。

+0

謝謝。這非常有幫助。 – user3010273

+1

如果這解決了你的問題,請[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)所以其他人知道你沒有更需要幫助。 – Tim

+0

至少有一種擴展功能的方法 - 查看這些[方法](http://en.wikipedia.org/wiki/Feature_scaling#Methods) – arturomp

7

除了縮放到由Tim提供的單位長度方法,standardization最常用於機器學習領域。請注意,當您的測試數據出現時,使用訓練樣本的平均值和標準偏差進行縮放比較合理。如果您的訓練數據量非常大,假設他們服從正態分佈是安全的,所以新測試數據超出範圍的可能性不會那麼高。有關更多詳細信息,請參閱此post