在《大家的人工智能——线性回归》中,我们介绍了如何找到一条直线来拟合训练数据,下面把之前的一元线性回归扩展到多元线性回归:
y=θ0+θ1x1+θ2x2+⋅⋅⋅+θnxn y = \theta_0 + \theta_1x_1 + \theta_2x_2 + ··· +
\theta_nx_ny=θ0​+θ1​x1​+θ2​x2​+⋅⋅⋅+θn​xn​

其中θ0对应的是一元线性回归中的那个b,我们再把上面的方程改写一下:
y=θ0x0+θ1x1+θ2x2+⋅⋅⋅+θnxn y = \theta_0x_0 + \theta_1x_1 + \theta_2x_2 + ··· +
\theta_nx_ny=θ0​x0​+θ1​x1​+θ2​x2​+⋅⋅⋅+θn​xn​
其中x0=1。因此可以把上面的再改写成矩阵形式:
Y=θTX Y = \theta^TX Y=θTX

在之前的线性回归中我们说到通过梯度下降的方式,最小化代价函数而找到最优的一组参数最终得到一条直线。聪明的小伙伴很可能会想到,既然是最小化代价函数的值,为什么不用求导的方式得到最佳的θ值呢?

完全是可以的,现在我们看看上面我们改写的那个矩阵形式的公式,我们现在已经知道y和X的值了,做一下简单的求导就能求出θ:
θ=(XTX)−1XTY \theta = (X^TX)^{-1}X^TY θ=(XTX)−1XTY


这样把训练数据代入就能求出θ从而得到拟合数据的一个模型。那么它和梯度下降有什么不同呢,为什么几乎所有地方都在用梯度下降,而正规方程比较少见呢。我们来看看它们两者之间的特点就明白了:

梯度下降:

* 需要选取学习率α
* 需要很多次迭代来得到最优的θ
* 即使训练数据庞大也有良好的性能
正规方程:

* 不需要选取学习率α
* 不需要迭代
* 需要计算(XTX)−1(X^TX)^{-1}(XTX)−1,时间复杂度为O(n3)O(n^3)O(n3)
* 如果训练数据规模庞大,速度会很慢
很明显,正规方程在数据量大的时候性能不够好,而在机器学习、深度学习的任务中,数据有时候会非常庞大,因此将梯度下降作为优化方式。

题外话

现在我们来看看那个正规方程是如何导出来的,首先:
θ=[θ0,θ1,⋅⋅⋅,θn]T \theta = [\theta_0, \theta_1,···,\theta_n]^T θ=[θ0​,θ1​,⋅⋅⋅,θ
n​]T

Y=[y(1),y(2),⋅⋅⋅,ym]T Y = [y^{(1)},y^{(2)},···,y^{m}]^T Y=[y(1),y(2),⋅⋅⋅,ym]T
代价函数:
J(θ0,θ1,⋅⋅⋅,θn)=12m(Xθ−Y)T(Xθ−Y)=12m(XTθTXθ−XTθTY−YTXθ+YTY) J(\theta_0,
\theta_1,···,\theta_n) = \frac{1}{2m}(X\theta-Y)^T(X\theta-Y)
=\frac{1}{2m}(X^T\theta^TX\theta-X^T\theta^TY-Y^TX\theta+Y^TY)J(θ0​,θ1​,⋅⋅⋅,θn​)
=2m1​(Xθ−Y)T(Xθ−Y)=2m1​(XTθTXθ−XTθTY−YTXθ+YTY)
因此要最小化上面代价函数,这里给出两个矩阵的求导公式:
∂AB∂B=AT \frac{\partial{AB}}{\partial{B}} = A^T ∂B∂AB​=AT
∂XTAX∂X=2AX \frac{\partial{X^TAX}}{\partial{X}} = 2AX ∂X∂XTAX​=2AX

因此:
∂J(θ)∂θ=12m(2XTXθ−2XTY) \frac{\partial{J(\theta)}}{\partial{\theta}} =
\frac{1}{2m}(2X^TX\theta - 2X^TY)∂θ∂J(θ)​=2m1​(2XTXθ−2XTY)
令其等于零:
12m(2XTXθ−2XTY)=0 \frac{1}{2m}(2X^TX\theta - 2X^TY) = 0 2m1​(2XTXθ−2XTY)=0
得到:
θ=(XTX)−1XTY \theta = (X^TX)^{-1}X^TY θ=(XTX)−1XTY

欢迎关注微信公众号“机器工匠”,阅读更多精彩文章。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信