本文介绍两种one-hot编码方法。第一种方法针对字符类型的特征变量;第二种方法针对数值型特征。
1.Pandas自带的get_dummies方法
特征工程中,最为繁琐却很重要的一步就是处理字符型特征,对于字符型特征的处理,常用方式就是one-hot编码。
先来看原始数据:
做one-hot编码
df = pd.get_dummies(df) #get_dummies对“整数特征”无变化,对“类别特征”one-hot编码
处理后的数据:
pandas自动将BusinessTravel和Department做了编码。简单易用。
2.自己写的一行代码
连续数值型特征往往要做分桶离散化处理,one-hot同样是常用的处理方式。下面的代码其实是学习Google的机器学习教程时摘抄下来的,简洁实用。
Income_Ranges = zip(range(1000,19000,2000),range(3000,21000,2000))
temp = df[['Attrition','MonthlyIncome']]
for r in Income_Ranges:
temp['MonthlyIncome_%d_to_%d' % r] = temp['MonthlyIncome'].apply(lambda x: 1.0 if x >= r[0] and x < r[1] else 0.0)
首先定义好各个桶的范围。然后再做one-hot编码。效果如下:
最左边一列是原始的数据,取值范围为1900到20000之间,做完分桶离散处理后,衍生出多个特征,如上图右侧数据所示。
就是这样。