欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

模型改善与泛化(标准化与特征映射)

程序员文章站 2024-02-02 11:29:58
...

跟我一起机器学习系列文章将首发于公众号:月来客栈,欢迎文末扫码关注!

0 前言

经过前面两讲的内容,我们完成了对线性回归(Linear Regression)和逻辑回归(Logistics Regression)核心内容的学习,但是一些涉及到模型改善(Optimization)与泛化(Generalization)的方式并没有进行介绍。第三讲,笔者将以线性回归和逻辑回归为例(同样可以运通到后续介绍的其他算法模型),介绍一些机器学习中常用的模型和数据处理的技巧,以及尽可能的说清楚为什么要这么做的原因。由于这部分的内容略微有点杂乱,所以笔者将按照如下顺序来递进地进行介绍,同时再辅以示例进行说明。

模型改善与泛化(标准化与特征映射)

1 特征标准化

1.1 等高线

什么是特征标准化呢?我们为什么要把特征进行标准化?在回答这两个疑问之前,我们先来介绍一下什么是等高线。

模型改善与泛化(标准化与特征映射)
如图所示,上面部分为$J(w_1,w_2)=w_1^2+w_2^2+5$的函数图像,而下面部分则为函数$J(w_1,w_2)$的等高线。也就是说,其实等高线就是函数$J(w_1,w_2)$向下的投影。而所谓等高指的就是任意一个投影中任意一个环所代表的函数值都是一样的大小,反映在3D图上就是:**在曲面上总能找到一个闭环,使得环上每一点的函数值$J(w_1,w_2)$都相等,即距离谷底的高度都相同。**
模型改善与泛化(标准化与特征映射)

如图所示同样为函数J(w1,w2)=w12+w22+5J(w_1,w_2)=w_1^2+w_2^2+5的等高线图,其中任意一个环代表的都是不同(w1,w2)(w_1,w_2) 取值下相等的函数值,同时可以看到中心点为J(0,0)J(0,0)对于的函数值5,通常这也是通过梯度下降进行求解的点。

1.2 梯度与等高线

由于**梯度的方向始终与等高线保持垂直,**所以理想情况下不管随机初始点选在何处,我们都希望梯度下降算法沿着如下图左边所示的方向达到最低点,而非右边的情形:

模型改善与泛化(标准化与特征映射)
可以看出,要是同时用梯度下降算法来优化上图左右两边所代表的目标函数,那么显然左边的能够以更快的速度进行收敛。同时,从右图似乎可以看出,若$w_1$和$w_2$分别增加若干个单位,则增加$w_2$所带来的函数增量要远大于$w_1$。例如,当初始点$(w_1=0,w_2=0)$时,$w_1$从0变化至3的函数增量$J(3,0)$要远远小于$w_2$从0变化至3的函数增量$J(0,3)$,前者约等于1.5左右,而后者约等于12左右。那什么样的目标函数,会使得等高线呈现出椭圆形的环状的现象呢?

1.3 标准化

  • 线性回归

    首先以线性回归为例,假设某线性回归模型为y^=w1x1+w2x2\hat{y}=w_1x_1+w_2x_2,且x1[0,1],x2[10,100]x_1\in[0,1],x_2\in[10,100],则此时便有如下目标函数(暂时忽略bb):
    J(w1,w2)=12i=1m(y(i)(w1x1(i)+w2x2(i)))2(1) J(w_1,w_2)=\frac{1}{2}\sum_{i=1}^m\left(y^{(i)}-(w_1x^{(i)}_1+w_2x^{(i)}_2)\right)^2\tag{1}
    从式子(1)(1)可以看出,由于x2>>x1x_2>>x_1,那么当w1,w2w_1,w_2产生相同的增量时,后者能产生更大的函数变化值,而这就引发了如上图所示的“椭圆形”的环状等高线。

  • 逻辑回归

    从上面的分析可以得知,在线性回归中若各个特征变量之间的取值范围差异较大,则会导致目标函数收敛速度慢等问题。换句话说哪怕是所有的特征变量取值都在类似的范围,那么便不会出现这类问题。那么在逻辑回归中又会有什么样的影响呢?由于在逻辑回归中特征组合的加权和会作用上sigmoid函数,所以影响目标函数收敛的除了上述因素外,更主要的还取决于zz的大小。

模型改善与泛化(标准化与特征映射)
从图中可以看出,当$z<-5$左右时$g(z)\approx0$;当$z>5$左右时$g(z)\approx1$;但由逻辑回归的梯度更新公式$(2)$可知,此时可能导致梯度趋于0,从而使得参数无法得到更新。 $$ \begin{aligned} \frac{\partial J}{\partial W_j} &=-\frac{1}{m}\sum_{i=1}^m\left[y^{(i)}-h(x^{(i)})\right]x^{(i)}_j \end{aligned}\tag{2} $$

综上所述,在进行建模之前我们应该对数据进行标准化。常见的标准化方法有很多种,这里暂时只介绍机器学习中应用最广泛的标准化方法standarlization。

x=xmean(x)σ(3) x'=\frac{x-mean(x)}{\sigma}\tag{3}
其中mean(x)mean(x)表示每一列特征的平均值,σ\sigma表示每一列特征的标准差。在进行standarlization标准化后,将使得每一列特征的均值都为0 ,方差都为1。其实现代码如下:

def standarlization(X):
    mean = X.mean(axis=0)
    std = X.std(axis=0)
    return (X - mean) / std

读者可通过文末提供的示例代码进行特征标准化与非标准化结果的对比。

2 特征组合与映射

2.1 特征组合

在前面介绍线性回归的时候,我们通过一个预测梯形面积的示例来解释了特征组合的作用(丰富特征属于以提高预测精度)。但是,我们还可以从另外一个角度来理解特征组合。线性回归和逻辑回归从本质上讲都属于线性模型(都是一系列的特征加权求和),因此对于基本的线性模型和逻辑回归模型来讲其分别只能用于预测线性变化的实数和线性可分的分类。即对于如下图所示的两种任务,两个模型均不能够完成:

模型改善与泛化(标准化与特征映射)
### 2.2 特征映射

所谓的特征映射就是将原来的特征属性通过各种方式,将其映射到高维空间的过程。当原有的特征被映射到高维空间后,就可能存在一个线性的超平面能够对数据进行很好的拟合。因此,对于上图中的两种情形我们都可以通过前面介绍的方法将其映射为多项式特征,如:将x1,x2x_1,x_2映射为x1,x2,x1x2,x12,x22,x1x22,x12x2x_1,x_2,x_1x_2,x_1^2,x_2^2,x_1x_2^2,x_1^2x_2等等。但是对于上面的两个例子来说,只需要将原始特征映射至最高2次多项式就能完成相应的任务,即通过如下代码便可完成:

    pol = PolynomialFeatures(degree=2, include_bias=False)
    x_pol = pol.fit_transform(x)

拟合后的结果:

模型改善与泛化(标准化与特征映射)
注:右图中的棕色与淡蓝色为决策边界

3 总结

本篇为模型的改善与泛化部分的第一篇文章,本文首先介绍了什么是等高线以及梯度与等高线之间的关系;然后介绍了为什么要对数据进行标准化以及一种常用的标准化方法;最后从另外一个角度介绍了特征组合与映射,以此来解决非线性的回归与分类问题。本次内容就到此结束,感谢阅读!

若有任何疑问与见解,请发邮件至aaa@qq.com并附上文章链接,青山不改,绿水长流,月来客栈见!

引用

  • 图示及示例代码:关注公众号回复“示例代码”即可直接获取!
模型改善与泛化(标准化与特征映射)