特征工程:类别变量处理
feature preprocessing
类别变量分为无序的(categorical features)和有序的(ordinal features)
以kaggle上titanic数据集举例
Sex就属于categorical feature
Pclass属于ordinal feature,它的值有1,2,3,代表的船票等级是依次提高的
这里不能把Pclass看做是numeric feature处理,因为如果是numeric feature的话,1和2之间的差别,同2和3之间的差别是一样的,而ordinal feature的话则不一定。
tree-based models:
当模型是基于树时,对categorical features的处理,通常是把它们映射到不同的数字,例如male->0,female->1,这一过程就叫做label encoding。
以数据中Embark类别举例,label encoding有以下几种方式
1.Alphabetic(字母顺序)
[S,C,Q]–>[2,1,3]
sklearn.preprocessing.LabelEncoder
2.出现顺序
[S,C,Q]–>[1,2,3]
pandas.factorize
3.出现频率
[S,C,Q]–>[0.7,0.1,0.2]
encoding = train_df.groupby(‘Embarked’).size()
encoding = encoding/len(train_df)
train_df[‘Embarked_code’]=train_df[‘Embarked’].map(encoding)
假如有多个类别具有相同频率时,可用以下处理
from scipy.stats import rankdata
non-tree-based models
而像KNN,linear model和神经网络模型,对categorical features要用不同的处理方法,通常用one-hot encoding独热编码
feature generation
例如把两列特征直接拼接起来