数据预处理和特征工程 - 数据预处理 - 编码与哑变量 & 二值化与分段
处理分类型特征:编码与哑变量
多标签和特征在数据收集完毕的时候,都不是以数字来表现的。比如说,学历的取值可以是["小学",“初中”,“高中”,"大学"]
,付费方式可能包含["支付宝",“现金”,“微信”]
等等。在这种情况下,为了让数据适应算法和库,我们必须将数据进行编码,即是说,将文字型数据转换为数值型。
LabelEncoder 标签专用,能够将分类转换为分类数值
OrdinalEncoder:特征专用,能够将分类特征转换为分类数值
OneHotEncoder:独热编码,创建哑变量刚才已经用 OrdinalEncoder 把分类变量 Sex 和 Embarked 都转换成数字对应的类别了。在舱门 Embarked 这一列中,我们使用代表了三个不同的舱门,然而这种转换不是完全正确的,0,1,2 之间有运算关系,但舱门显然没有,我们对于这些有不同性质的变量进行定义
然而在对特征进行编码的时候,这三种分类数据都会被我们转换为,这三个数字在算法看来,是连续且可以计算的,这三个数字相互不等,有大小,并且有着可以相加相乘的联系。所以算法会把舱门这样的分类特征,都误会成是分类特征。
OrdinalEncoder 可以用来处理有序变量,但对于名义变量,我们只有使用 OneHotEncoder 哑变量的方式来处理,才能够尽量向算法传达最准确的信息:
这样的变化,让算法能够彻底领悟,原来三个取值是没有可计算性质的,是“有你就没有我”的不等概念。在我们的数据中,性别和舱门,都是这样的名义变量。因此我们需要使用独热编码,将两个特征都转换为哑变量。
使用类 sklearn.preprocessing.LabelBinarizer 可以对做哑变量,许多算法都可以处理多标签问题(比如说决策树),但是这样的做法在现实中不常见,因此我们在这里就不赘述了。
处理连续型特征:二值化与分段
Binarizer,根据阈值将数据二值化(将特征值设置为 0 或 1),用于处理连续型变量。大于阈值的值映射为 1,而小于或等于阈值的值映射为 0。默认阈值为 0
BinsDiscretizer,连续型变量划分为多个分类变量的类,能够将连续型变量排序后按顺序分箱后编码。
DataFrame 对象需要 iloc 或者 loc 索引,ndarray 对象不能用 iloc、loc,直接用[]索引即可
视频作者:菜菜TsaiTsai链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili
版权声明: 本文为 InfoQ 作者【烧灯续昼2002】的原创文章。
原文链接:【http://xie.infoq.cn/article/33337f5522a9344bb767ae129】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论