機器學習之特征歸一化


  當數據集的數值屬性具有非常大的比例差異,往往導致機器學習的算法表現不佳,當然也有極少數特例。在實際應用中,通過梯度下降法求解的模型通常需要歸一化,包括線性回歸、邏輯回歸、支持向量機、神經網絡等模型。但對於決策樹不使用,以C4.5為例,決策樹在進行節點分裂時主要依據數據集D關於特征X的信息增益比,而信息增益比根特征是否經過歸一化是無關的。

  同比例縮放所有屬性常用的兩種方法是:最小-最大縮放和標准化

  最小-最大縮放(又加歸一化),將值重新縮放使其最終范圍在0-1之間,(current - min)/ (max - min),Scikit-Learn提供了MinMaxSaler轉換器可以完成該功能

  標准化,(current - mean) / var,使得得到的結果分布具備單位方差,相比最小-最大縮放,標准化的方法受異常值的影響更小,同樣Scikit-Learn也提供了StandScaler轉換器

1. MinMaxScaler和StandScaler類結構

  

2. MinMaxScaler示例

>>> from sklearn.preprocessing import MinMaxScaler
>>>
>>> data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
>>> scaler = MinMaxScaler()
>>> print(scaler.fit(data))
MinMaxScaler(copy=True, feature_range=(0, 1))
>>> print(scaler.data_max_)
[  1.  18.]
>>> print(scaler.transform(data))
[[ 0.    0.  ]
 [ 0.25  0.25]
 [ 0.5   0.5 ]
 [ 1.    1.  ]]
>>> print(scaler.transform([[2, 2]]))
[[ 1.5  0. ]]

3. StandScaler示例

>>> data = [[0, 0], [0, 0], [1, 1], [1, 1]]
>>> scaler = StandardScaler()
>>> print(scaler.fit(data))
    StandardScaler(copy=True, with_mean=True, with_std=True)
>>> print(scaler.mean_)
    [ 0.5  0.5]
>>> print(scaler.transform(data))
    [[-1. -1.]
    [-1. -1.]
    [ 1.  1.]
    [ 1.  1.]]
>>> print(scaler.transform([[2, 2]]))
    [[ 3.  3.]]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM