本文对吴恩达老师的机器学习教程中的正规方程做一个详细的推导,推导过程中将涉及矩阵和偏导数方面的知识,比如矩阵乘法,转值,向量点积,以及矩阵(或向量)微积分等。
求θ的公式
在视频教程中,吴恩达老师给了我们一个如下图红色方框内的求参数 θ 的公式
先对图中的公式简单的说明一下。
公式中的 θ 是 n+1 元列向量,y 是m元列向量,X 是一个 m 行 n+1 列的矩阵。具体到上图中的例子,X 和 y在上图已经有了,它们都是已知的值,而未知的
\theta=\begin{bmatrix}
\theta_0 \\
\theta_1 \\
\theta_2 \\
\theta_3 \\
\theta_4
\end{bmatrix} 可以通过图中的公式以及X和y的值求出来,最终得到假设函数(hypothesis function)为
h_{\theta}(x_{0},x_{1},x_{2},x_{3},x_{4})=\theta_{0}x_0 + \theta_{1}x_1 +\theta_{2}x_2 +\theta_{3}x_3 +\theta_{4}x_4假设函数和代价函数
多元线性回归的假设函数和代价函数如下:
我们把 h 函数的矩阵形式代入并改写代价函数的求和部分,得到:
J(\theta)=\frac{1}{2m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2=\frac{1}{2m}(X\theta-y)^T(X\theta-y)先来看一下
\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2为什么等于
(X\theta-y)^{T}与
(X\theta-y)这两个向量的点积。
X=\begin{bmatrix}{x_{10}}&\dots&{x_{1n}}\\\vdots&\ddots&\vdots\\{x_{m0}}&\dots&{x_{mn}}\end{bmatrix}
\theta=\begin{bmatrix}\theta_0 \\\vdots\\\theta_n
\end{bmatrix}
y=\begin{bmatrix}y_1 \\\vdots\\y_m\end{bmatrix}
根据矩阵的乘法规则得
X\theta=\begin{bmatrix}{x_{10}\theta_0+x_{11}\theta_1\dots+x_{1n}\theta_n}\\\vdots\\{x_{m0}\theta_0+x_{m1}\theta_1\dots+x_{mn}\theta_n}\end{bmatrix}
然后根据矩阵的减法规则有
X\theta-y=\begin{bmatrix}{x_{10}\theta_0+x_{11}\theta_1\dots+x_{1n}\theta_n-y_0}\\\vdots\\{x_{m0}\theta_0+x_{m1}\theta_1\dots+x_{mn}\theta_n-y_m}\end{bmatrix}
很明显
(X\theta-y)^T(X\theta-y) = (x_{10}\theta_0+x_{11}\theta_1\dots+x_{1n}\theta_n-y_0)^2 +\dots+({x_{m0}\theta_0+x_{m1}\theta_1\dots+x_{mn}\theta_n-y_m})^2
所以
(X\theta-y)^T(X\theta-y) =\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2(X\theta-y)^T(X\theta-y) =\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2对代价函数J求导
为什么我们要对代价函数求导呢?因为当J(θ)取最小值时,该函数对于θ的导数为0,于是我们可以得到J'(θ)=0的方程,从而解出θ的值。
代价函数
J(\theta)=\frac{1}{2m}(X\theta-y)^T(X\theta-y)是一个关于向量的函数,而函数中的其它常量又是矩阵,所以对该函数求导会涉及到矩阵和向量的微积分知识,因为这方面的知识对机器学习来说实在是太重要了,而且一般的数学书上也没有相关内容,所以我打算专门写一篇文章来介绍矩阵和向量相关的微积分基础知识,因此下面的求导会直接利用矩阵求导公式而不会详细推导矩阵求导过程。
令
u=X\theta-y,u是一个m维向量。于是有
J(\theta)=\frac{1}{2m}u^Tu\frac{\partial}{\partial{\theta}} J(\theta)=\frac{1}{2m}\frac{\partial}{\partial{\theta}}(u^Tu)根据矩阵的复合函数求导法则有
\frac{\partial}{\partial{\theta}} J(\theta)=\frac{1}{2m}(\frac{\partial u}{\partial{\theta}})^{T}(\frac{\partial J}{\partial{u}})……(1)先来推导
\frac{\partial J}{\partial{u}},J是关于u的函数,而u是一个元素为实数的m维列向量,所以
u^T与
u的点积是一个实数,也就是有
u^{T}u=(u_1)^2 + (u_2)^2 + \dots + (u_m)^2\frac{\partial J}{\partial{u}} = \frac{\partial}{\partial{u}} {(u^Tu)} = \frac{\partial}{\partial{u}} {((u_1)^2 + (u_2)^2 + \dots + (u_m)^2)}根据因变量为实数,自变量为向量的导数定义,可得
\frac{\partial}{\partial{u}} {((u_1)^2 + (u_2)^2 + \dots + (u_m)^2)}=\begin{bmatrix}2u_1 \\\vdots\\2u_m\end{bmatrix}=2\begin{bmatrix}u_1 \\\vdots\\u_m\end{bmatrix}=2u=2(X\theta-y)……(2)
再来看
(\frac{\partial u}{\partial{\theta}})^{T}的推导,这是向量对向量的求导,根据其定义,有
(\frac{\partial u}{\partial{\theta}})^{T}=(\frac{\partial}{\partial{\theta}}{(X\theta-y)})^T=(\frac{\partial}{\partial{\theta}}{(X\theta)-\frac{\partial}{\partial{\theta}}y)})^T因为y是一个元素为实数常量的m维向量,所以它对n+1维的列向量θ求导会得到一个m行n+1列的0矩阵,也就是
\frac{\partial}{\partial{\theta}}y = \begin{bmatrix}0&\dots&0\\\vdots&\ddots&\vdots\\0&\dots&0\end{bmatrix}_{mn}
根据公式,
\frac{\partial}{\partial{\theta}}{(X\theta)}=X所以
(\frac{\partial u}{\partial{\theta}})^{T}=(\frac{\partial}{\partial{\theta}}{(X\theta-y)})^T=(\frac{\partial}{\partial{\theta}}{(X\theta)-\frac{\partial}{\partial{\theta}}y)})^T = (X-Z)^T=X^T……(3)把(2)和(3)代入(1)式有
\frac{\partial}{\partial{\theta}} J(\theta)=\frac{1}{2m}(\frac{\partial u}{\partial{\theta}})^{T}(\frac{\partial J}{\partial{u}})=\frac{1}{2m}2X^{T}(X\theta-y)=\frac{1}{m}X^{T}(X\theta-y)如前所述,J(θ)取得最小值时其对于θ导数为0,于是有
\frac{1}{m}X^{T}(X\theta-y) = 0推出
X^{T}(X\theta-y) = 0使用矩阵乘法的分配律有
X^{T}X\theta-X^{T}y = 0移项
X^{T}X\theta=X^{T}y等式两边同时在左边乘以
(X^{T}X)^{-1},为什么要在左边乘呢,因为矩阵乘法有顺序
(X^{T}X)^{-1}(X^{T}X)\theta=(X^{T}X)^{-1}X^{T}y因为矩阵的逆与矩阵相乘得到单位矩阵,所以
I\theta=(X^{T}X)^{-1}X^{T}y也就是
\theta=(X^{T}X)^{-1}X^{T}y整个公式推导完毕!