在先前的两篇帖子中讨论了基本的线性回归和逻辑回归的问题,这些模型还比较理想,实际情况下样本数据的分布可能并没有这么完美,这个时候就会产生一系列的问题。
1 非线性回归
很多时候我们碰到的回归问题并不是线性的,而是非线性的。换句话说,我们的样本数据分布不是一条完美的直线,而是一条曲线。以之前线性回归的例子,如下图所示,样本数据的分布更符合一条曲线的形状。那么如何去拟合得到这样的曲线呢?
在处理非线性回归的问题上,我们一般有两种方法,第一种是想办法转换成线性的关系,第二种是用多项式模型逼近。
①转换成线性关系
这种方法适合于函数模型简单的非线性关系,在拟合前,我们可以先观察下样本的分布情况,判别其曲线的模型。比如说我观察得出样本的分布似乎符合曲线关系,此时如果我们在左右两边同时取对数,就可以得到
,令
,得到
,如此一来我们就可以把非线性问题转换成线性问题。
②多项式模型
多项式模型在非线性回归分析中占有重要的地位。根据级数展开的原理,任何曲线、曲面、超平面的问题,在一定的范围内都能够用多项式任意逼近,有点像高数里的泰勒展开式。
其一般形式为:,然后用最小二乘法和梯度下降法即可确定系数。
2 特征缩放
假设你现在有一个二特征的回归问题,还是以房子为例。其中一个特征是房屋的总面积大小,其范围在0~2000平米,另外一个特征是厕所的面积,其范围在0~20平米。这时你最后得到的代价函数可能是这样子的:
一个方向上极其的长,另一个方向上极其的短,这时如果使用梯度下降法,因为学习速率是固定的,如果设的比较小,在使用梯度下降法的求解最优点就会变得非常慢。所以我们必须对特征变量进行归一化,将特征变量缩小到0~1范围。在这个例子中我们只需要把房屋总面积除以2000,厕所面积除以20就可以了。另外,亲测在实际进行梯度下降法的迭代过程中,如果没有进行归一化,很可能会造成数据溢出,导致算法奔溃。
3 学习速率的选择
学习速率过大或者过小都会产生一些问题,如果过小,在使用梯度下降法时就会很慢。而学习速率如果很大将会导致发散。如下图所示:
在运用梯度下降法时,我们是根据在程序中进行迭代求得最优的特征系数,如果
过大,
将会沿着图中红色的路径变化,变成
、
、
、
、
……,无法收敛到局部最小值,反而会一直发散下去。为了更加容易理解,我们试想一下自己拥有和奥特曼一样长的大长腿,站在一座山上。为了到达山谷我们沿着坡度往下走,可是这个时候由于我们的腿太长,步长太大,直接跨到了对面的一座山上,于是又往下走,又跨到了原来的山上,但是比原先的位置更高一点……如此循环我们只会越爬越高,永远都到不了山谷。
4 正则化
下图展示了用多项式拟合曲线的结果。第一幅图显然差强人意,通常把这样的结果称作欠拟合。第三幅图拟合结果似乎还行,但是曲线变化剧烈,如果在样本数据中又有一个很明显的噪声,拟合所得的曲线又会是另外一番样子,这时所得的模型就没有很好的泛化能力,通常把这样的结果称作过拟合(overfitting)。而我们期望得到的模型是第二幅图所示的样子。
再来看逻辑回归的例子,图一中是欠拟合的结果,决策边界并没有很好的将样本数据分类。图三是过拟合的结果,这决策边界太完美了,但是中间被曲线包裹的x状点很可能是噪声,用这样的模型去分类,很可能会造成更多的误差。而我们期望得到的是图二的模型。
在机器学习中,欠拟合可以通过增加样本数据等一系列方法解决。但是过拟合就比较麻烦了,于是我们引入了正则化项。
正则化项通常是加在代价函数后面的,这样新的代价函数就为。那么怎样理解正则化项对于防止过拟合的作用呢?
以多项式拟合为例,过拟合往往是高幂次项作用的结果,假设正则化项中如果很大,在
也很大的情况下,高幂次项的作用就会被放大,代价函数值就会很大。我们要让代价函数最小,
只能趋向于0。
试想一下上图中过拟合的结果,在引入正则化项后,计算代价函数最小值时,如果得到的、
都趋向于0那么得到的不就和我们想要的模型差不多了嘛。