一、问题由来
最近在做ctr预估的实验时,还没思考过为何数据处理的时候要先进行one-hot编码,于是整理学习如下:
在很多机器学习任务如ctr预估任务中,特征不全是连续值,而有可能是分类值。如下:
分类变量(定性特征)与连续变量(定量特征)。我们训练模型的变量,一般分为两种形式。以广告收入增长率为例,如果取值为0-1之间任意数,则此时变量为连续变量。如果把增长率进行分段处理,表示成如下形式:[0,0.3],(0.3,0.6],(0.6,1],那么此时变量为分类变量。
特征转换。对于分类变量,建模时要进行转换,通常直接转换为数字。比如将[0,0.3],(0.3,0.6],(0.6,1]表示为0,1,2。原因主要有两点:
1,转换后可以提高模型运算效率。
2,对于一些模型,比如逻辑回归或计算距离时,无法对分类值直接进行计算。
直接转换为数字,也会带来一些问题:
1,转换为数字后,默认为连续变量,违背最初设计,影响效率。
2,转换后的值会影响同一特征在样本中的权重。比如转换为1000和转换为1对模型影响明显不同。
因此,需要更好的编码方式对特征进行转换。
one-hot编码。one-hot编码的定义是用N位状态寄存