机器学习及实战——线性回归

线性回归(Linear regression)是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。其实,还有梯度下降法、坐标轴下降法、最小角回归法等。


1.线性回归函数

线性回归遇到的问题一般是这样的。我们有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)

    我们的问题是,对于一个新的(x_1^{(x)}, x_2^{(x)}, ...x_n^{(x)}, 他所对应的y_x是多少呢? 如果这个问题里面的y是连续的,则是一个回归问题,否则是一个分类问题。

    对于n维特征的样本数据,如果我们决定使用线性回归,那么对应的模型是这样的:

    h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n}, 其中\theta_i (i = 0,1,2... n)为模型参数,x_i (i = 0,1,2... n)为每个样本的n个特征值。这个表示可以简化,我们增加一个特征x_0 = 1 ,这样h_\theta(x_0, x_1, ...x_n) = \sum\limits_{i=0}^{n}\theta_{i}x_{i}

    进一步用矩阵形式表达更加简洁如下:

    h_\mathbf{\theta}(\mathbf{X}) = \mathbf{X\theta}

    其中, 假设函数h_\mathbf{\theta}(\mathbf{X})为mx1的向量,\mathbf{\theta}为nx1的向量,里面有n个代数法的模型参数。\mathbf{X}为mxn维的矩阵。m代表样本的个数,n代表样本的特征数。

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

    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})

    由于矩阵法表达比较的简洁,后面我们将统一采用矩阵方式表达模型函数和损失函数。

2.线性回归算法

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

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

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

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

    如果采用最小二乘法,则\mathbf{\theta}的结果公式如下:

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

3.线性回归正则化

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

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

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

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

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

     Lasso回归的求解办法一般有坐标轴下降法(coordinate descent)和最小角回归法( Least Angle Regression)。

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

    J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) + \frac{1}{2}\alpha||\theta||_2^2

    其中\alpha为常数系数,需要进行调优。||\theta||_2为L2范数。

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

      Ridge回归的求解比较简单,一般用最小二乘法。这里给出用最小二乘法的矩阵推导形式,和普通线性回归类似。

    令J(\mathbf\theta)的导数为0,得到下式:

    \mathbf{X^T(X\theta - Y) + \alpha\theta} = 0

    整理即可得到最后的\theta的结果:

    \mathbf{\theta = (X^TX + \alpha E)^{-1}X^TY}

     其中E为单位矩阵。

4.Logistic回归

Logistic回归是回归的一种方法,它利用的是Sigmoid函数阈值在[0,1]这个特性。Logistic回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。其实,Logistic本质上是一个基于条件概率的判别模型(Discriminative Model)。

所以要想了解Logistic回归,我们必须先看一看Sigmoid函数 ,我们也可以称它为Logistic函数。它的公式如下:

 
 

整合成一个公式,就变成了如下公式:

坐标图上表现这个样子:

根据sigmoid函数的特性,我们可以做出如下的假设:

上式即为在已知样本x和参数θ的情况下,样本x属性正样本(y=1)和负样本(y=0)的条件概率。理想状态下,根据上述公式,求出各个点的概率均为1,也就是完全分类都正确。但是考虑到实际情况,样本点的概率越接近于1,其分类效果越好。比如一个样本属于正样本的概率为0.51,那么我们就可以说明这个样本属于正样本。另一个样本属于正样本的概率为0.99,那么我们也可以说明这个样本属于正样本。但是显然,第二个样本概率更高,更具说服力。我们可以把上述两个概率公式合二为一:

合并出来的Cost,我们称之为代价函数(Cost Function)。当y等于1时,(1-y)项(第二项)为0;当y等于0时,y项(第一项)为0。为了简化问题,我们对整个表达式求对数,(将指数问题对数化是处理数学问题常见的方法):

这个代价函数,是对于一个样本而言的。给定一个样本,我们就可以通过这个代价函数求出,样本所属类别的概率,而这个概率越大越好,所以也就是求解这个代价函数的最大值。既然概率出来了,那么最大似然估计也该出场了。假定样本与样本之间相互独立,那么整个样本集生成的概率即为所有样本生成概率的乘积,再将公式对数化,便可得到如下公式:

其中,m为样本的总数,y(i)表示第i个样本的类别,x(i)表示第i个样本,需要注意的是θ是多维向量,x(i)也是多维向量。

综上所述,满足J(θ)的最大的θ值即是我们需要求解的模型。

sigma函数求解推导:(梯度上升法)

梯度上升法公式:

而J(θ)为:

sigmoid函数为:

那么,现在我只要求出J(θ)的偏导,就可以利用梯度上升算法,求解J(θ)的极大值了。

那么现在开始求解J(θ)对θ的偏导,求解如下(数学推导):

其中:

再由:

可得:

接下来,就剩下第三部分:

综上所述:

因此,梯度上升迭代公式为:

然后我们就可以自己编写代码,计算最佳拟合参数。


http://www.cnblogs.com/pinard/p/6004041.html

http://www.cnblogs.com/pinard/p/6018889.html

https://blog.csdn.net/c406495762/article/details/77723333

猜你喜欢

转载自blog.csdn.net/keithic/article/details/81280991