机器学习之特征离散化

250 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

李沐曾说过,模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。

1. 特征离散化的作用

在实际工作中,需要使用譬如LR这种线性分类器的时候,往往需要将特征离散化成0/1特征,之后再进行模型训练。这样的好处有以下几方面:

  1. 单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合
  2. 离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
  3. 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;

2. 特征离散化可以引入非线性的证明

参考资料:blog.csdn.net/u011086367/… 注意下面的例子对于分类和回归问题都适用,回归问题时图中就不是两类分布在曲线两类的样本了,而是沿着曲线分布的样本。 假设真实的决策面为y=x2y=x^2,如下图黄色曲线所示;假设现在我们用一个线性模型去拟合数据,则得到的决策面为y=kx+by=kx+b,如下图中黑色直线所示: 在这里插入图片描述

图2.1 用线性模型去拟合非线性决策面的数据

显然上述模型不能很好地拟合数据。如果我们将特征xx离散化为多个0/1特征(one-hot编码):

0<xs1,x1=1;else x1=00<xs2,x2=1;else x2=00<xsn,xn=1;else xn=0(2-1)\begin{aligned} 0< x\leq s_1,x_1&=1;else\ x_1=0\\ 0< x\leq s_2,x_2&=1;else\ x_2=0\\ \cdots\\ 0< x\leq s_n,x_n&=1;else\ x_n=0\\ \tag{2-1} \end{aligned}

则新的模型表达式为:y=kxx1+k2x2++knxn+by=k_x x_1+k_2 x_2+\cdots+k_nx_n+b。决策面变为

0<xs1,y=k1+b0<xs2,y=k2+b0<xsn,y=kn+b(2-2)\begin{aligned} 0< x\leq s_1,y&=k_1+b\\ 0< x\leq s_2,y&=k_2+b\\ \cdots\\ 0< x\leq s_n,y&=k_n+b\\ \tag{2-2} \end{aligned}

模型学习出的决策面如下图所示: 在这里插入图片描述

图2.2 特征离散化后拟合非线性决策面

由上图可见,是模型能够拟合线性不可分的数据了