特征處理—歸一化(Normalization)—標准化(Standardization)



返回 我的研究方向(Research Interests)



什么是特征處理


通過 特定的統計方法(數學方法) 數據 轉換成 算法要求的數據

  • 數值型數據
    • 歸一化
    • 標准化
    • 缺失值
  • 類別型數據:one-hot編碼
  • 時間類型:時間的切分

歸一化(Normalization)


目的

使得某一個特征對最終的結果不會造成更大的影響,即【三個特征同等重要的時候,就需要進行歸一化】

歸一化公式如下:

\[X^{'} = \frac{x-min}{max-min} \]

\[X^{''} =X^{'}*(mx-mi)+mi \]

注:作用於每一列,max為一列的最大值,min為一列的最小值,那么x”為最終結果,mx,mi分別為指定區間值默認mx為1,mi為0

例如:
image
得到如下
image

特點、缺點、應用

特點:通過對原始數據進行變換把數據映射到(默認為[0,1])之間

缺點、應用:異常點對最大值最小值的影響太大, 所以這種方法魯棒性較差,只適合傳統精確小數據場景
image

實現代碼(sklearn庫)

from sklearn.preprocessing import MinMaxScaler  # sklearn歸一化API


def normalization():
    """
    歸一化處理
    :return: NOne
    """
    mm = MinMaxScaler(feature_range=(0, 1))  # 【 每個特征縮放到給定范圍(默認[0, 1]) feature_range = (0, 1) 】

    # X:numpy array格式的數據[n_samples,n_features]
    # 返回值:轉換后的形狀相同的array
    data = mm.fit_transform([[90, 2, 10, 40],
                             [60, 4, 15, 45],
                             [75, 3, 13, 46]])

    print(data)

    return None


if __name__ == '__main__':
    normalization()


輸出:
[[1.         0.         0.         0.        ]
 [0.         1.         1.         0.83333333]
 [0.5        0.5        0.6        1.        ]]

標准化(Standardization)


目的

通過對原始數據進行變換把數據變換到均值為0,方差為1范圍內
標准化公式如下:

\[X^{'} =\frac{x-mean}{σ} \]

\[var =\frac{(x_1-mean)^2+(x_2-mean)^2+...(x_n-mean)^2}{n} \]

\[σ=\sqrt{var} \]

注:作用於每一列,mean為平均值,σ為標准差(考量數據的穩定性)
方差:
衡量隨機變量或一組數據時離散程度的度量,
方差越大,說明數據越離散,就是都是離平均值遠;方差為0, 說明所有這個特征所有值都一樣

例如:
image

應用

應用:在已有樣本足夠多的情況下比較穩定,適合現代嘈雜大數據場景。

實現代碼(sklearn庫)

from sklearn.preprocessing import StandardScaler  # sklearn標准化API


def standardization():
    """
    標准化縮放
    :return:
    """
    std = StandardScaler()

    # 處理之后每列來說所有數據都聚集在均值0附近方差為1
    #  X:numpy array格式的數據[n_samples,n_features]
    #  返回值:轉換后的形狀相同的array
    data = std.fit_transform([[90, 2, 10, 40],
                              [60, 4, 15, 45],
                              [75, 3, 13, 46]])

    print(data)

    return None


if __name__ == '__main__':
    standardization()


輸出:
[[ 1.22474487 -1.22474487 -1.29777137 -1.3970014 ]
 [-1.22474487  1.22474487  1.13554995  0.50800051]
 [ 0.          0.          0.16222142  0.88900089]]

歸一化、標准化對比


對於歸一化來說:
如果出現異常點,影響了最大值和最小值,那么結果顯然會發生改變。

對於標准化來說:
如果出現異常點,由於具有一定數據量,少量的異常點對於平均值的影響並不大,從而方差改變較小。

缺失值


  • 刪除:如果每列或者行數據缺失值達到一定的比例,建議放棄整行或者整列
  • 插補:可以通過缺失值每行或者每列的平均值、中位數來填充
from sklearn.preprocessing import Imputer
import numpy as np

def im():
    """
    缺失值填補
    :return:
    """
    # missing_values 需要填補的值的類型
    # strateg 填補策略
    # axis 按行(1)按列(0)填補
    im = Imputer(missing_values="NaN", strategy="mean",axis=0)

    data = im.fit_transform([[1,2],[np.nan,3],[7,6]])
    print(data)

    return None


if __name__ == '__main__':
    im()


免責聲明!

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



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