我们前面提到过线性回归的参数是如何更新的。
weights = weights - alpha * dataMatrix.transpose()* error
weights是线性回归的权重系数,alpha是学习率,dataMatrix.transpose()是样本的特征情况,error是分类的错误,在这里是f(x)-y。
我们以年龄与收入的简单的一元回归问题入手。
横轴是年龄,纵轴是收入,一般来说,对于个人来说其年龄小收入低,随着年龄增大,持续奋斗,收入逐渐上升,然后年龄大了,退休了,收入开始下降。如果我们直接对其进行线性回归则显然得到的是一条y=wx+b的直线。它大概会是这样的。
因为线性回归这类简单的线性模型只能拟合出线性的决策平面,所以对于这种非线性的关系很难表达出来。
那么如果我们对年龄做离散化之后onehot展开,比如【15~20】为1,【20~25】为2.。。。。。。
则模型将变成:
y=w1x1+w2x2+w3x3......则,当某个人的年龄落入其中一个区间的时候假设落入w1的这个区间,根据其权重更新的公式:
weights = weights - alpha * dataMatrix.transpose()* error
可以知道,样本的原始数据只有w1对应的区间有值,其它权重对应的区间的取值都是0,则根据上面的公式,最终weights只更新了w1,其它权重w的梯度更新均为0.则此时,针对于w1的区间的样本就会得到拟合更新w1。凡是落入这个区间的样本根据
y=w1x1+w2x2+w3x3......,
均会被预测为y=w1x1(x属于w1对应的age的区间),此时:
我们得到了这么一个分界面,无论w2,w3.。。。wn的值是多少,对于这个区间的样本,
y=w1x1+w2x2+w3x3......
永远的预测结果等于
y=w1x1
,接着对于w2对应的区间如法炮制上述的过程,最终我们可以得到这么一个分界面。
可以看到,离散化并且onehot展开之后,线性回归的决策面变成了一大堆线性决策面的组合,可以看成是折线,从而获得了非线性拟合的能力,但是本质上类似于一大堆局部线性回归的组合。
这就是为什么离散化之后线性模型的表达能力能够增强拟合出非线性的决策面,解决非线性的问题。
实际上从pac的理论上来解释可能更加合理,但是pac太复杂了,我也不知道怎么说清楚,继续努力吧。