线性回归(Linear Regression)

1. 前言

线性回归形式简单、易于建模,但却蕴涵着机器学习中一些重要的基本思想。许多功能更为强大的非线性模型(nonlinear model)可在线性模型的基础上通过引入层级结构或高维映射而得。此外,由于线性回归的解\(\theta\)直观表达了各属性在预测中的重要性,因此线性回归有很好的可解释性。

2. 线性回归原理

线性回归遇到的问题一般是这样的。我们有\(m\)个样本,每个样本对应于\(n\)维特征和一个结果输出。

训练数据的形式:

\[(x_1^{(0)}, x_2^{(0)}, ...x_n^{(0)}, y_0), (x_1^{(1)}, x_2^{(1)},...x_n^{(1)},y_1), ... (x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_n) \]

我们主要做的是通过找到参数\((\theta_0,\theta_1,...\theta_m)\),线性回归模型如下:

\[h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n} \]

矩阵化如下:

\[h_θ(X)=Xθ \]

得到了模型,我们需要求出需要的损失函数,一般线性回归我们用均方误差作为损失函数。损失函数的代数法表示如下:

\[J(\theta_0, \theta_1..., \theta_n) = \sum\limits_{i=0}^{m}(h_\theta(x_0, x_1, ...x_n) - y_i)^2 \]

矩阵化如下:

\[J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) \]

3. 线性回归的算法

对于线性回归的损失函数\(J(\mathbf\theta)=\frac{1}{2}(\mathbf{X\theta}-\mathbf{Y})^T(\mathbf{X\theta}-\mathbf{Y})\),我们常用的有两种方法来求损失函数最小化时候的\(θ\)参数:一种是梯度下降法,一种是最小二乘法。

如果采用梯度下降法,则\(\theta\)的迭代公式是这样的:

\[\mathbf\theta= \mathbf\theta - \alpha\mathbf{X}^T(\mathbf{X\theta} - \mathbf{Y}) \]

通过若干次迭代后,我们可以得到最终的\(\theta\)的结果

如果采用最小二乘法,则\(\theta\)的结果公式如下:

\[\mathbf{\theta} = (\mathbf{X^{T}X})^{-1}\mathbf{X^{T}Y} \]

当然线性回归,还有其他的常用算法,比如牛顿法和拟牛顿法,这里不详细描述。

4. 多项式线性回归

我们遇到的数据不一定都是线性的形式,如果式\(y=x_1^2+x_2^2\)的模型,那线性回归很难拟合这个函数,这时候就需要用到多项式回归了。

回到我们开始的线性模型,\(h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n}\), 如果这里不仅仅是x的一次方,而是二次方,那么模型就变成了多项式回归。这里写一个只有两个特征的2次多项式回归的模型:

\[h_\theta(x_1, x_2) = \theta_0 + \theta_{1}x_1 + \theta_{2}x_{2} + \theta_{3}x_1^{2} + \theta_{4}x_2^{2} + \theta_{5}x_{1}x_2 \]

我们令\(x_0 = 1, x_1 = x_1, x_2 = x_2, x_3 =x_1^{2}, x_4 = x_2^{2}, x_5 = x_{1}x_2\),这样我们就得到了下式:

\[h_\theta(x_1, x_2) = \theta_0 + \theta_{1}x_1 + \theta_{2}x_{2} + \theta_{3}x_3 + \theta_{4}x_4 + \theta_{5}x_5 \]

可以发现,我们又重新回到了线性回归,这是一个五元线性回归,可以用线性回归的方法来完成算法。对于每个二元样本特征\((x_1,x_2)\),我们得到一个五元样本特征\((1,x_1,x_2,x^2_1,x^2_2,x_1x_2)\),通过这个改进的五元样本特征,我们重新把不是线性回归的函数变回线性回归,但是达到了非线性拟合的效果。

5.广义线性回归

在上一节的线性回归的多项式中,我们对样本特征进行了变换,用线性回归完成了非线性回归的效果。这里我们对于特征\(y\)做推广。比如我们的输出\(Y\)不满足和\(X\)的线性关系,但是\(logY\)\(X\)满足线性关系,模型函数如下:

\[logY=Xθ \]

这样对与每个样本的输入\(y\),我们用\(logy\)去对应, 从而仍然可以用线性回归的算法去处理这个问题。我们把 \(logy\)一般化,假设这个函数是单调可微函数\(g(.)\),则一般化的广义线性回归形式是:\(g(Y)=Xθ\)或者\(Y=g^{-1}(Xθ)\)。这个函数g(.)我们通常称为联系函数。后面会讲到的逻辑回归这是在联系函数的基础上进行分类的。

6. 线性回归的正则化

为了防止模型的过拟合,我们在建立线性模型的时候经常需要加入正则化项。一般有L1正则化和L2正则化。

6.1 L1正则化Lasso回归

L1正则化通常称为Lasso回归,它和一般线性回归的区别是在损失函数上增加了一个L1正则化的项,L1正则化的项有一个常数系数\(\alpha\)来调节损失函数的均方差项和正则化项的权重,具体Lasso回归的损失函数表达式如下:  

\[J(θ)=\frac{1}{2n}(Xθ-Y)^T(Xθ-Y)+\alpha|θ|_1 \]

其中\(n\)为样本个数,\(\alpha\)为常数系数,需要进行调优。\(|θ|_1\)为L1范数。

Lasso回归可以使得一些特征的系数变小,甚至还是一些绝对值较小的系数直接变为0。增强模型的泛化能力。

6.2 L2正则化Ridge回归

L2正则化通常称为Ridge回归,它和一般线性回归的区别是在损失函数上增加了一个L2正则化的项,和Lasso回归的区别是Ridge回归的正则化项是L2范数,而Lasso回归的正则化项是L1范数。具体Ridge回归的损失函数表达式如下:

\[J(θ)=\frac{1}{2}(Xθ-Y)^T(Xθ-Y)+\frac{1}{2}\alpha|θ|_2^2 \]

其中\(\alpha\)为常数系数,需要进行调优。\(|θ|2\)为L2范数。

Ridge回归在不抛弃任何一个特征的情况下,缩小了回归系数,使得模型相对而言比较的稳定,但和Lasso回归比,这会使得模型的特征留的特别多,模型解释性差。

7. 总结

线性回归的算法本身并不复杂,但是在它的基础上延伸出来的内容可谓是相当丰富,涉及到了多项式中的特征转换(特征工程)、针对过拟合的正则化项、运用非常广泛的逻辑回归等。要真正理解它需要对机器学习的知识融汇贯通。

posted @ 2018-10-13 14:26  hyc339408769  阅读(10090)  评论(0编辑  收藏  举报