特徵縮放 | 歸一化和標準化(上)

什麼是特徵縮放:數組

  就是將全部數據映射到同一尺度。如:dom

  某訓練集 x_train 爲:優化

  

                                  (x_trian)spa

  將其進行某種特徵縮放以後,獲得新的值:code

  

       顯然通過特徵縮放以後,特徵值變小了blog

          

爲何要進行特徵縮放呢?class

有些特徵的值是有區間界限的,如年齡,體重。而有些特徵的值是能夠無限制增長,如計數值。import

因此特徵與特徵之間數值的差距會對模型產生不良影響。如:float

在該樣本集中,因爲量綱不一樣,模型受 '次數'特徵所主導。所以若是沒有對數據進行預處理的話numpy

有可能帶來誤差,難以較好的反應特徵之間的重要程度。其實還有利於優化的其餘緣由

 

特徵縮放的分類:

         (不止這兩種,但經常使用的爲標準化)

1.先看一下 歸一化(min-max 縮放)

 經過歸一化處理,將值映射到0-1之間的某個數值。

 公式:

          

  X(i)爲某個特徵值、X(min)爲這個特徵的全部特徵值的最小值、X(max)爲這個特徵

  的全部特徵值的最大值

  也就是將 (某個特徵值減去特徵最小值的差)除以 (特徵最大值減去特徵最小值的差)

  從而獲得這個特徵值歸一化以後的數值。

   Python簡單實現:

import numpy as np

def min_max_scaler(X):
    '''歸一化'''
    assert X.ndim == 2,'必須爲二維數組'
    X = np.array(X,dtype=float)
    n_feature = X.shape[1]
    for n in range(n_feature):
        min_feature = np.min(X[:,n])
        max_feature = np.max(X[:,n])
        X[:, n] = (X[:,n] - min_feature) / (max_feature - min_feature)
    return X

x = np.random.randint(0,100,(25,4))
print(min_max_scaler(x))

'''

[[0.89247312 0.11494253 0.17857143 0.29347826]
[0.09677419 0.74712644 0.10714286 0.63043478]
[0. 0.87356322 0.95238095 0.67391304]

.......
[0.2688172 0.4137931 0.33333333 0.89130435]
[0.11827957 0.7816092 0.55952381 0.15217391]
[1. 0.57471264 0.70238095 0.45652174]
[0.16129032 1. 0.75 0.23913043]]

'''

  sklearn中對應API: from sklearn.preprocessing import MinMaxScaler

  

相關文章
相關標籤/搜索