1. 程式人生 > >機器學習——資料特徵預處理

機器學習——資料特徵預處理

歸一化以及標準化

歸一化

特定:通過對原始資料進行變換把資料對映到(預設為[0,1])之間

公式:X'=(x-min)/(max-min) X''=X'*(mx-mi)+mi

注意:作用於每一列,max為一列的最大值,min為一列的最小值,那麼X''為最終結果,mx,mi分別為指定區間值預設mx為1,mi為0

sklearn歸一化API:sklearn.preprocessing.MinMaxScaler

  • MinMaxScaler(feature_range=(0,1)...)

        每個特徵縮放到給定範圍(預設[0,1])

        MinMaxScalar.fit_transform(X)

  • X:numpy array格式的資料[n_samples,n_features]

        返回值:轉換後的形狀相同的array

下面程式碼實現:

from sklearn.preprocessing import MinMaxScaler
def mm():
    """
    歸一化處理
    :return:None
    """
    mm=MinMaxScaler(feature_range=(2,3))
    data=mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
    print(data)
if __name__=="__main":
    mm()

執行結果如下所示:

目的:使得一個特徵對最早結果不會造成更大影響

總結:注意在特定場景下最大值最小值是變化的,另外,最大值與最小值非常容易受異常點影響,所有這種方法魯棒性較差,只適合傳統精確小資料場景。

標準化

特點:通過對原始資料進行變換把資料變換到均值為0,方差為1範圍內

公式:X'=(x-mean)/C

注意:作用於每一列,mean為平均值,C為標準差

結合歸一化來談標準化

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

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

Sklearn特徵化API:skikit-learn:scikit-learn.preprocessing.StandardScaler

StandardScaler(...)

處理之後每列來說所有資料都聚集在均值0附近標準差差為1

  • standardScaler.fit_transform(X)

       X:numpy array格式的資料[n_samples,n_features]

       返回值:轉換後的形狀相同的array

  • StandardScaler.mean_

          原始資料中每列特徵的平均值

  • StandardScaler.std_

         原始資料每列特徵的方差

下面用程式碼實現:

from sklearn.preprocessing import StandardScaler
def stand():
    """
    標準化縮放
    :return:
    """
    std=StandardScaler()
    data=std.fit_transform([[1.,-1.,3.],[2.,4.,2.],[4.,6.,-1.]])
    print(data)
    return None
if __name__=="__main":
    stand()

實現結果如下所示:

標準化總結:在已有樣本足夠多的情況下比較穩定,適合現在嘈雜大資料場景。

數值型資料:標準縮放:

                                    1、歸一化

                                    2、標準化

                                    3、缺失值

類別型資料:                   one-hot編碼

時間型別:                       時間的切分

缺失值

缺失值處理方法:

1.刪除:如果每列或者行資料缺失值達到一定的比例,建議放棄整行或者整列

   插補:可以通過缺失值每行或者每列的平均值、中位數來填充

2、sklearn缺失值API:sklearn.preprocessing.Imputer

Imputer(missing_values='NaN',strategy='mean',axis=0)

完成缺失值插補

  • Imputer.fit_transform(X)

         X:numpy array格式的資料[n_samples,n_features]

          返回值:轉換後的形狀相同的array

下面用程式碼實現:

from sklearn.preprocessing import Imputer
import numpy as np
def im():
    """
    缺失值處理
    :return:
    """
    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()

執行結果如下:

Imputer流程

1.初始化Imputer,指定“缺失值",指定填補策略,指定行或列

   注:缺失值也可以是別的指定要替換的值

2.呼叫fit_transform