上一篇文章《什么情况下需要对特征变量标准化》介绍了特征变量的标准化,是针对连续型数值变量,由此关联到离散的分类变量是否需要做处理呢?本文介绍三种常用方法。
(一)OneHotEncoder
在数据分析中有个重要的步骤就是辨识变量的类型,分类变量有两种,一种是定类变量,离散值之间没有大小意义,例如:水果:[苹果,香蕉,梨子];另一种是定序变量,离散值之间有大小意义,例如学历:[小学、初中、高中]。为了提升数据分析效率,分类变量的值在数据建模分析中通常会被转换为数字特征。[苹果,香蕉,梨子]表示为[0,1,2],[小学、初中、高中]表示为[0,1,2]。数字冠以特征值大小,对于学历没有问题。但是水果就会有问题,三种水果在通常意义下并没有大小之分,凭什么苹果是0,梨子是2呢?所以为了公平就需要换一种编码方式来标记三种水果,引出one-hot编码。对于具体样本数据[苹果,香蕉,梨子,香蕉]利用one-hot编码如下:
[苹果,香蕉,梨子,香蕉]记为[[1,0,0],[0,1,0],[0,0,1],[0,1,0]]
具体操作方法是:将总体特征值放在行,将需要编码的样本放在列,如果样本与总体值相等则记为“1”,其他记为“0”
首先引入需要的工具包,本操作的 sklearn 使 用的是0.23.1版本。import sklearnfrom sklearn import preprocessingimport numpy as npsklearn.__version__'0.23.1'
OneHotEncoder编码过程:
genders = ['female', 'male']locations = ['from Africa', 'from Asia', 'from Europe', 'from US']browsers = ['uses Chrome', 'uses Firefox', 'uses IE', 'uses Safari']enc = preprocessing.OneHotEncoder(categories=[gen