除了對於高度傾斜的特徵施加轉換,對數值特徵施加一些形式的縮放一般會是一個好的習慣。在數據上面施加一個縮放並不會改變數據分佈的形式(好比上面說的'capital-gain' or 'capital-loss');可是,規一化保證了每個特徵在使用監督學習器的時候可以被平等的對待。注意一旦使用了縮放,觀察數據的原始形式再也不具備它原本的意義了,就像下面的例子展現的。html
運行下面的代碼單元來規一化每個數字特徵。咱們將使用sklearn.preprocessing.MinMaxScaler
來完成這個任務。python
from sklearn.preprocessing import MinMaxScaler # 初始化一個 scaler,並將它施加到特徵上 scaler = MinMaxScaler() numerical = ['age', 'education-num', 'capital-gain', 'capital-loss', 'hours-per-week'] features_raw[numerical] = scaler.fit_transform(data[numerical]) # 顯示一個通過縮放的樣例記錄 display(features_raw.head(n = 1))
age | workclass | education_level | education-num | marital-status | occupation | relationship | race | sex | capital-gain | capital-loss | hours-per-week | native-country | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0.30137 | State-gov | Bachelors | 0.8 | Never-married | Adm-clerical | Not-in-family | White | Male | 0.02174 | 0.0 | 0.397959 | United-States |
從上面的數據探索中的表中,咱們能夠看到有幾個屬性的每一條記錄都是非數字的。一般狀況下,學習算法指望輸入是數字的,這要求非數字的特徵(稱爲類別變量)被轉換。轉換類別變量的一種流行的方法是使用獨熱編碼方案。獨熱編碼爲每個非數字特徵的每個可能的類別建立一個「虛擬」變量。例如,假設someFeature
有三個可能的取值A
,B
或者C
,。咱們將把這個特徵編碼成someFeature_A
, someFeature_B
和someFeature_C
.算法
特徵X | 特徵X_A | 特徵X_B | 特徵X_C | |
---|---|---|---|---|
B | 0 | 1 | 0 | |
C | ----> 獨熱編碼 ----> | 0 | 0 | 1 |
A | 1 | 0 | 0 |
此外,對於非數字的特徵,咱們須要將非數字的標籤'income'
轉換成數值以保證學習算法可以正常工做。由於這個標籤只有兩種可能的類別("<=50K"和">50K"),咱們沒必要要使用獨熱編碼,能夠直接將他們編碼分別成兩個類0
和1
,在下面的代碼單元中你將實現如下功能:api
pandas.get_dummies()
對'features_raw'
數據來施加一個獨熱編碼。'income_raw'
轉換成數字項。
0
;將">50K"轉換成1
。