除了对于高度倾斜的特征施加转换,对数值特征施加一些形式的缩放一般会是一个好的习惯。在数据上面施加一个缩放并不会改变数据分布的形式(好比上面说的'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
。