機器學習實踐(四)—sklearn之特徵預處理
阿新 • • 發佈:2018-11-25
一、特徵預處理概述
-
什麼是特徵預處理
# scikit-learn的解釋 provides several common utility functions and transformer classes to change raw feature vectors into a representation that is more suitable for the downstream estimators.
翻譯過來:通過一些轉換函式將特徵資料轉換成更加適合演算法模型的特徵資料過程
-
數值型資料的無量綱化:
- 歸一化
- 標準化
-
為什麼我們要進行歸一化/標準化?
如果存在特徵的數值差別比較大的特徵,那麼分析出來的結果顯然就會傾向於數值差別比較大的特徵。
如果存在特徵的方差比較大的特徵,那麼分析出來的結果顯然就會傾向於方差比較大的特徵。
我們需要用到一些方法進行無量綱化,使不同規格的資料轉換到同一規格。
二、歸一化
-
定義
通過對原始資料進行變換把資料對映到 [0,1] 之間
-
公式
max、min 分別為該特徵資料中的最大值、最小值
mx、mi 分別為設定的歸一化區間的最大值、最小值
-
sklearn API:
sklearn.preprocessing.MinMaxScaler (feature_range=(0,1))
- MinMaxScalar.fit_transform(X)
- X:numpy array 格式的資料
- return:轉換後的形狀相同的array
- MinMaxScalar.fit_transform(X)
-
示例程式碼:
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
data = pd.read_csv('dating.txt')
# 1、建立傳喚器,預設 feature_range=(0,1)
transfer = MinMaxScaler(feature_range=(2,3))
# 2、呼叫fit_transform
transfer.fit_transform(data[['milage','Liters','Consumtime','target']])
三、標準化
-
sklearn API:
sklearn.preprocessing.StandardScaler( )
- 處理之後每列來說所有資料都聚集在均值0附近標準差差為1
- StandardScaler.fit_transform(X)
- X:numpy array格式的資料
- return:轉換後的形狀相同的array
-
示例程式碼:
import pandas as pd
from sklearn.preprocessing import StandardScaler
data = pd.read_csv('dating.txt')
# 1、建立轉換器
transfer = StandardScaler()
# 2、呼叫fit_transform
new_data = transfer.fit_transform(data[data.columns[:3]])
# 3、列印標準化後的結果
print(new_data)