对于标称型数据,在特征处理的时候,需要对其进行编码
在编码之前,如果训练集和测试集是分开的,则需要对其进行合并,避免标称数据丢失
1 | # 合并 |
常用的编码方式如下
1.Label编码
对于一个有m个category的特征,经过label encoding以后,每个category会映射到0到m-1之间的一个数。label encoding适用于ordinal feature (特征存在内在顺序)。
1 | from sklearn import preprocessing |
或者
1 | train_data = train_data.replace({'BsmtQual': {'Ex': 5, 'Gd': 4, 'TA': 3, 'Fa': 2, 'Po': 1, np.NaN: 0}}) |
2.顺序编码
类似于Label编码
参考:数据转化
1 | from sklearn import preprocessing |
3.one-hot编码
对于一个有m个category的特征,经过独热编码(OHE)处理后,会变为m个二元特征,每个特征对应于一个category。这m个二元特征互斥,每次只有一个激活。
独热编码解决了原始特征缺少内在顺序的问题,但是缺点是对于high-cardinality categorical feature (category数量很多),编码之后特征空间过大(此处可以考虑PCA降维),而且由于one-hot feature 比较unbalanced,树模型里每次的切分增益较小,树模型通常需要grow very deep才能得到不错的精度。因此OHE一般用于category数量 <4的情况。
参考:机器学习 | 数据缩放与转换方法(1) 和 kaggle编码categorical feature总结
使用sklearn来one-hot编码
1 | from sklearn import preprocessing |
使用pandas来one-hot编码
1 | import pandas as pd |