什么是线性回归?
线性回归是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。
简单的线性回归
这里选取一元一次的简单线性回归来介绍线性回归,后面的多元线性回归将介绍复杂的回归。
假设函数
假设x,y间存在关系: y = θ0 + θ1 * x ,函数被称为假设函数。
对于假设函数中的参数θ0 、θ1 ,我们无法直接计算出它们的值,也无法取一组θ0 、θ1 的值使得所有的样本点都落到函数曲线 y = θ0 + θ1 * x 上,我们只能计算出一组θ0 、θ1 的值使得函数能最大限度的模拟样本规律。
代价函数
代价函数,顾名思义是用来评价θ0 、θ1 质量的函数,代价函数越小表明函数能更好地模拟样本。
代价函数 J(θ0 , θ1) = 12m∗∑i=1m(θ0+θ1∗x−yi)2\frac{1}{2m}* \sum_{i=1}^{m} (\theta _0 + \theta _1 * x - y_i)^22m1∗∑i=1m(θ0+θ1∗x−yi)2 , 代价函数表示的是预测值 θ 0 + θ 1 * x 与 真实值yi 的平方差的平均值,函数值越小说明函数的拟合程度越好。(代价函数有很多种,平方误差代价函数是其中的一种,是解决线性回归最常用的一种)。
计算代价函数 θ 0 , θ 1的问题 转化成了:求θ 0 、 θ 1 的值使得代价函数的值最小。接下来我们看一下如何求θ 0 、 θ 1 的值。
梯度下降
梯度下降算法用来求代价函数的最小值,可以把代价函数想象成一座山,梯度下降就是一个人从山的某一个位置一步一步的往山下走,直到这个人在自己的周围找不到能更往下的道路,这时这个人便到达了局部最优或者全局最优。此时 ∂(Jθ0,θ1)∂θ0\frac {\partial (J\theta _0,\theta _1)} {\partial \theta _0}∂θ0∂(Jθ0,θ1)、∂(Jθ0,θ1)∂θ1\frac {\partial (J\theta _0,\theta _1)} {\partial \theta _1}∂θ1∂(Jθ0,θ1)的值等于0或接近0.
梯度下降的过程是通过不断更新 θ 0 、 θ 1 的值实现的:
θj=θj−α∗∂(Jθ0,θ1)∂θj\theta_j = \theta_j - \alpha * \frac {\partial (J\theta _0,\theta _1)} {\partial \theta _j}θj=θj−α∗∂θj∂(Jθ0,θ1)
其中 α 对应于学习率,控制参数 θ 0 、 θ 1 的变化幅度,可以理解为下山的人的步幅。这里需要注意的是 θ 0 、 θ 1 的值要同步更新,不可以先更新一个值,然后拿更新后的参数再去更新另一个参数。
将代价函数 J(θ0 , θ1) 代入梯度下降公式,得到:
∂(Jθ0,θ1)∂θ0=1m∗∑i=1m(hθ(xi)−yi)∗x0i\frac {\partial (J\theta _0,\theta _1)} {\partial \theta _0} = \frac{1}{m} * \sum_{i=1}^{m} (h_\theta (x^{i}) - y^{i}) * x_0^{i}∂θ0∂(Jθ0,θ1)=m1∗∑i=1m(hθ(xi)−yi)∗x0i
∂(Jθ0,θ1)∂θ1=1m∗∑i=1m(hθ(xi)−yi)∗x1i\frac {\partial (J\theta _0,\theta _1)} {\partial \theta _1} = \frac{1}{m} * \sum_{i=1}^{m} (h_\theta (x^{i}) - y^{i}) * x_1^{i}∂θ1∂(Jθ0,θ1)=m1∗∑i=1m(hθ(xi)−yi)∗x1i
将导数结果代入参数更新公式 θj=θj−α∗∂(Jθ0,θ1)∂θj\theta_j = \theta_j - \alpha * \frac {\partial (J\theta _0,\theta _1)} {\partial \theta _j}θj=θj−α∗∂θj∂(Jθ0,θ1) 中,在迭代次数范围内不断更新参数 θ 0 、 θ 1 ,得到 θ 0 、 θ 1 的最优值。
起始点的选取对最终的结果也会有影响,这里借用一下别人的图形象的展示一下:
多元线性回归
前面的简单线性回归只是为了便于理解,很难解决现实中的问题,因为现实中的问题往往牵涉到很多的变量,例如房屋的价格牵涉到户型、面积大小、楼层、房龄、城市级别等变量,这就是多元线性回归问题。
假设函数
h(x)=θ0+θ1∗x1+θ2∗x2+θ3∗x3+...+θn∗xnh(x ) = \theta _0 + \theta _1 * x_1 + \theta _2*x_2 + \theta _3*x_3 + ... +\theta _n*x_nh(x)=θ0+θ1∗x1+θ2∗x2+θ3∗x3+...+θn∗xn
参数 θ 可以表示为θ=[θ0θ1θ2...θn_1θn]\theta = \begin{bmatrix}\theta _0\\ \theta _1\\ \theta _2\\ ...\\ \theta _n\__1\\ \theta _n\\ \end{bmatrix}θ=⎣⎢⎢⎢⎢⎢⎢⎡θ0θ1θ2...θn_1θn⎦⎥⎥⎥⎥⎥⎥⎤
自变量X可以表示为 X=[X0X1X2...Xm_1Xm]=[X10X11,X12,X13...X1nX20X21,X22,X23...X2nX30X31,X32,X33...X3n.....Xm0Xm1,Xm2,Xm3...Xmn]X = \begin{bmatrix}X _0\\ X_1\\ X_2\\ ...\\ X_m\__1\\ X_m\\ \end{bmatrix} = \begin{bmatrix} X_1^0 & X_1^1, &X_1^2, &X_1^3 &... &X_1^n \\ X_2^0 & X_2^1, &X_2^2, &X_2^3 &... &X_2^n \\ X_3^0 & X_3^1, &X_3^2, &X_3^3 &... &X_3^n \\ ..... \\ X_m^0 & X_m^1, &X_m^2, &X_m^3 &... &X_m^n \end{bmatrix}X=⎣⎢⎢⎢⎢⎢⎢⎡X0X1X2...Xm_1Xm⎦⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎡X10X20X30.....Xm0X11,X21,X31,Xm1,X12,X22,X32,Xm2,X13X23X33Xm3............X1nX2nX3nXmn⎦⎥⎥⎥⎥⎤
共有n+1个参数变量(θ0 也可以算为一个变量参数,是x0 的参数,x0 的值为1)。
共有m个样本,每个样本都有n+1个样本值。
假设函数可以表示为 h(x) = X**θ
代价函数
J(θT)=12m∗∑i=1m(h(θi)−yi)2J(\theta^T) = \frac{1}{2m} * \sum_{i=1}^{m}(h(\theta _i) - y_i)^2J(θT)=2m1∗∑i=1m(h(θi)−yi)2
梯度下降
θj=θj−α∗∂(JθT)∂θj\theta_j = \theta_j - \alpha * \frac {\partial (J\theta ^T)} {\partial \theta _j}θj=θj−α∗∂θj∂(JθT)
经计算偏导代入上述公式,得到各参数的更新公式如下:
θ0=θ0−α∗1m∑i=1m(h(xi)−yi)∗xi0\theta _0 = \theta _0 - \alpha *\frac{1}{m}\sum_{i=1}^{m}(h(x_i) - y_i) * x_i^0θ0=θ0−α∗m1∑i=1m(h(xi)−yi)∗xi0
θ1=θ1−α∗1m∑i=1m(h(xi)−yi)∗xi1\theta _1 = \theta _1 - \alpha *\frac{1}{m}\sum_{i=1}^{m}(h(x_i) - y_i) * x_i^1θ1=θ1−α∗m1∑i=1m(h(xi)−yi)∗xi1
…
θn=θn−α∗1m∑i=1m(h(xi)−yi)∗xin\theta _n = \theta _n - \alpha *\frac{1}{m}\sum_{i=1}^{m}(h(x_i) - y_i) * x_i^nθn=θn−α∗m1∑i=1m(h(xi)−yi)∗xin
通过不断迭代更新 θ 使得代价函数最小,从而得到最优的参数 θ 。
总结
线性规划本质上是寻找合适的变量参数使代价函数最小化,用函数h(θ)更好地模拟数据规律。
本人是刚开始学习机器学的菜鸟一枚,通过记录学习过程增强自己的理解,也顺便分享给有需要的人,还请各位多多指正。