李沐曾说过,模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。
1. 特征离散化的作用
在实际工作中,需要使用譬如LR这种线性分类器的时候,往往需要将特征离散化成0/1特征,之后再进行模型训练。这样的好处有以下几方面:
- 单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合
- 离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
- 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
2. 特征离散化可以引入非线性的证明
参考资料:https://blog.csdn.net/u011086367/article/details/52879531
注意下面的例子对于分类和回归问题都适用,回归问题时图中就不是两类分布在曲线两类的样本了,而是沿着曲线分布的样本。
假设真实的决策面为
y
=
x
2
y=x^2
y=x2,如下图黄色曲线所示;假设现在我们用一个线性模型去拟合数据,则得到的决策面为
y
=
k
x
+
b
y=kx+b
y=kx+b,如下图中黑色直线所示:
显然上述模型不能很好地拟合数据。如果我们将特征
x
x
x离散化为多个0/1特征(one-hot编码):
0
<
x
≤
s
1
,
x
1
=
1
;
e
l
s
e
x
1
=
0
0
<
x
≤
s
2
,
x
2
=
1
;
e
l
s
e
x
2
=
0
⋯
0
<
x
≤
s
n
,
x
n
=
1
;
e
l
s
e
x
n
=
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}
0<x≤s1,x10<x≤s2,x2⋯0<x≤sn,xn=1;else x1=0=1;else x2=0=1;else xn=0(2-1)
则新的模型表达式为:
y
=
k
x
x
1
+
k
2
x
2
+
⋯
+
k
n
x
n
+
b
y=k_x x_1+k_2 x_2+\cdots+k_nx_n+b
y=kxx1+k2x2+⋯+knxn+b。决策面变为
0
<
x
≤
s
1
,
y
=
k
1
+
b
0
<
x
≤
s
2
,
y
=
k
2
+
b
⋯
0
<
x
≤
s
n
,
y
=
k
n
+
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}
0<x≤s1,y0<x≤s2,y⋯0<x≤sn,y=k1+b=k2+b=kn+b(2-2)
模型学习出的决策面如下图所示:
由上图可见,是模型能够拟合线性不可分的数据了