在我们数据分析、建模的时候,首先要处理的就是各种数据,数据的类型也不仅仅局限于连续型数值。比如,性别、城市名等等此类的指标也是很多的。这种类型, 它是不具备序列性、也不能比较大小的,如果这个时候简单的用数字来替换,那么就给这种赋予了大小的属性,这就会影响权重矩阵的计算。这个时候,就可以用One-Hot编码(也有人称独热编码)这种特殊的编码方式了。

举例解释下为什么直接转变为数值型数据会有问题:对于分类型数据,如果种类较多,转变为分类1,2,3,4等来表示,带入到模型中,就被认为连续变量,并且如果同样的数据,一个分类被1代表,另一个分类被1000代表,1000和1对模型的影响明显不同,会影响统一特征在样本中的权重。

One-Hot编码是用N位状态寄存器来对N个状态进行编码。一个变量,共有3个分类值(ABC),那么N为3,对应的One-Hot编码可以表示为100,010,001。

one-hot的基本思想:将离散型特征的每一种取值都看成一种状态,若你的这一特征中有N个不相同的取值,那么我们就可以将该特征抽象成N种不同的状态,one-hot编码保证了每一个取值只会使得一种状态处于“激活态”,也就是说这N种状态中只有一个状态位值为1,其他状态位都是0。举个例子,假设我们以学历为例,我们想要研究的类别为小学、中学、大学、硕士、博士五种类别,我们使用one-hot对其编码就会得到:

python一位热码怎么转换为数字 一位热码编码_算法


对于连续型数据,有时候我们也需要做特征转换,比如说人的年龄,这个分布可能会从0一直到100,但其实他们的分布可能集中在10-40之间,那么我们可以将这种连续型的数据处理为分类变量。比如:0-18:1;19-30:2;30-40:3,40-60:4,60+:5,这样做的好处是提高模型运算的效率。比如用LR算法做模型,在数据处理过程中,可以先对连续变量进行离散化处理,然后对离散化后数据进行One-Hot编码,最后放入LR模型中。这样可以增强模型的非线性能力。

优缺点
(1)通过One-Hot编码,可以对特征进行了扩充。
(2)连续变量经过编码后,从一个权重变为多个权重,提升了模型的非线性能力。
(3)不需要多参数进行归一化处理。
(4)随着将大权重拆分成几个小权重管理特征,降低了异常值对模型的影响,增加了模型稳定性。
(5)生成了较大的稀疏矩阵。