sklearn特徵工程
阿新 • • 發佈:2022-02-10
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
- MinMaxScalar.fit_transform(X)
案例分析:
我們對以下資料進行運算,在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]
標準化總結:
在已有樣本足夠多的情況下比較穩定,適合現代嘈雜大資料場景。