1. 程式人生 > 其它 >sklearn特徵工程

sklearn特徵工程

1 特徵預處理API

sklearn.preprocessing

1.1 歸一化

定義:

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

公式:

mx : 指定範圍的最大值

mi: 指定範圍的最小值

API

  • sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )
    • MinMaxScalar.fit_transform(X)
      • X:numpy array格式的資料[n_samples,n_features]
    • 返回值:轉換後的形狀相同的array

案例分析:

我們對以下資料進行運算,在dating.txt中。儲存的就是之前的約會物件資料

milage,Liters,Consumtime,target
40920,8.326976,0.953952,3
14488,7.153469,1.673904,2
26052,1.441871,0.805124,1
75136,13.147394,0.428964,1
38344,1.669788,0.134296,1
  • 分析

1、例項化MinMaxScalar

2、通過fit_transform轉換

import pandas as pd
from sklearn.preprocessing import MinMaxScaler


def minmax_demo():
    """
    歸一化演示
    :return: None
    """
    data = pd.read_csv("./test.csv")
    print(data)
    # 1、例項化一個轉換器類
    transfer = MinMaxScaler(feature_range=(2, 3))
    # 2、呼叫fit_transform
    data = transfer.fit_transform(data[['milage', 'Liters', 'Consumtime']])
    print("最小值最大值歸一化處理的結果:\n", data)

    return None


# 歸一化
minmax_demo()

返回結果:

     milage     Liters  Consumtime  target
0     40920   8.326976    0.953952       3
1     14488   7.153469    1.673904       2
2     26052   1.441871    0.805124       1
3     75136  13.147394    0.428964       1
..      ...        ...         ...     ...
998   48111   9.134528    0.728045       3
999   43757   7.882601    1.332446       3

[1000 rows x 4 columns]
最小值最大值歸一化處理的結果:
 [[ 2.44832535  2.39805139  2.56233353]
 [ 2.15873259  2.34195467  2.98724416]
 [ 2.28542943  2.06892523  2.47449629]
 ..., 
 [ 2.29115949  2.50910294  2.51079493]
 [ 2.52711097  2.43665451  2.4290048 ]
 [ 2.47940793  2.3768091   2.78571804]]

歸一化總結:

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

1.2 標準化

定義:

通過對原始資料進行變換把資料變換到均值為0,標準差為1範圍內

公式:

  • 對於歸一化來說:如果出現異常點,影響了最大值和最小值,那麼結果顯然會發生改變
  • 對於標準化來說:如果出現異常點,由於具有一定資料量,少量的異常點對於平均值的影響並不大,從而方差改變較小。

**API: **

  • sklearn.preprocessing.StandardScaler( )
    • 處理之後每列來說所有資料都聚集在均值0附近標準差差為1
    • StandardScaler.fit_transform(X)
      • X:numpy array格式的資料[n_samples,n_features]
    • 返回值:轉換後的形狀相同的array

案例分析:

  • 分析

1、例項化StandardScaler

2、通過fit_transform轉換

def stand_demo():
    """
    標準化演示
    :return: None
    """
    data = pd.read_csv("./test.csv")
    print(data)
    # 1、例項化一個轉換器類
    transfer = StandardScaler()
    # 2、呼叫fit_transform
    data = transfer.fit_transform(data[['milage', 'Liters', 'Consumtime']])
    print("標準化的結果:\n", data)
    print("每一列特徵的平均值:\n", transfer.mean_)
    print("每一列特徵的方差:\n", transfer.var_)

    return None

stand_demo()

返回結果:

   milage     Liters  Consumtime  target
0   40920   8.326976    0.953952       3
1   14488   7.153469    1.673904       2
2   26052   1.441871    0.805124       1
3   75136  13.147394    0.428964       1
4   38344   1.669788    0.134296       1
標準化的結果:
 [[ 0.0947602   0.44990013  0.29573441]
 [-1.20166916  0.18312874  1.67200507]
 [-0.63448132 -1.11527928  0.01123265]
 [ 1.77297701  1.54571769 -0.70784025]
 [-0.03158673 -1.06346729 -1.27113187]]
每一列特徵的平均值:
 [3.8988000e+04 6.3478996e+00 7.9924800e-01]
每一列特徵的方差:
 [4.15683072e+08 1.93505309e+01 2.73652475e-01]

標準化總結:

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