正规方程组(The normal equations)
2. 正规方程组
上一节的梯度下降是一种最小化成本函数JJ的方法。这一节我们将介绍另一种算法也可以实现该功能且不需要使用迭代。正规方程组通过计算成本函数对每个θj\theta_j的偏导数,求出偏导为零的点来成本函数的最小值。为了不必写大量的代数式和矩阵导数,让我们约定一些矩阵计算的符号。
2.1 矩阵导数
对于一个函数f:Rm×n→Rf: \Bbb{R}^{m \times n} \to \Bbb{R},它将m*n的矩阵映射为一个实数,我们定义ff对A的偏导为:
\nabla_Af(A) = \begin{bmatrix}\frac{\partial f}{\partial A_{11}} & \cdots & \frac{\partial f}{\partial A_{1n}} \\\vdots & \ddots & \vdots\\\frac{\partial f}{\partial A_{m1}} & \cdots & \frac{\partial f}{\partial A_{mn}} \\\end{bmatrix}
举个例子,如果A=[A11A21A12A22]A = \begin{bmatrix}A_{11} & A_{12} \\ A_{21} & A_{22}\end{bmatrix}是一个2*2的矩阵,函数ff定义如下:
f(A) = \frac{3}{2}A_{11} + 5A_{12}^2 + A_{21}A_{22}.
根据矩阵偏导公式可求得:
\nabla_Af(A) = \begin{bmatrix} \frac{3}{2} & 10A_{12} \\ A_{22} & A_{21}\\ \end{bmatrix}
我们引入矩阵的迹,写作“tr\mathrm{tr}”。对于一个n阶方阵A,它的迹是其对角线元素之和:
\mathrm{tr}A = \sum_{i=1}^n A_{ii}
如果a是一个实数(也可看成1-by-1矩阵),有tra=a\mathrm{tr}a = a。迹操作符有这样的性质:如果矩阵AA和BB满足ABAB是方阵,则有trAB=trBA\mathrm{tr}AB = \mathrm{tr}BA,由此可推得:
\begin{align} \mathrm{tr}ABC = \mathrm{tr}CAB = \mathrm{tr}BCA\qquad\qquad\\ \mathrm{tr}ABCD = \mathrm{tr}DABC = \mathrm{tr}CDAB = \mathrm{tr}BCDA\\ \end{align}
迹操作符的下列性质也容易证明。其中AA和BB是方阵,aa是实数:
\begin{align} \mathrm{tr}A &= \mathrm{tr}A^T\\ \mathrm{tr} (A + B) &= \mathrm{tr}A + \mathrm{tr}B\\ \mathrm{tr} aA &= a\mathrm{tr}A\\ \end{align}
结合矩阵的迹和矩阵导数,可以给出下列公式:
\begin{align} \nabla_A \mathrm{tr}AB &= B^T &(1)\\ \nabla_{A^T} f(A) &= (\nabla_{A} f(A))^T &(2)\\ \nabla_A \mathrm{tr}ABA^TC &= CAB + C^TAB^T \qquad \qquad &(3)\\ \nabla_A |A| &= |A|(A^{-1})^T &(4)\\ \end{align}
其中(4)只在矩阵A为满秩矩阵时成立。
2.2 二顾最小方差
了解了矩阵导数这一工具后,为了实现最小化J(θ)J(\theta)的目标,我们先设法将成本函数JJ用向量表示。
给定一个训练集,我们将其以m-by-n矩阵XX的形式表示,其中每一行代表一个训练样本:
X = \begin{bmatrix} -(x^{(1)})^T-\\ -(x^{(2)})^T-\\ \vdots\\ -(x^{(m)})^T-\\ \end{bmatrix}
同时将包含所有目标值的y⃗ \vec{y}表示为一个m维的列向量:
\vec{y} = \begin{bmatrix} y^{(1)}\\ y^{(2)}\\ \vdots\\ y^{(m)}\\ \end{bmatrix}
因为hθ(x(i))=(x(i))Tθh_\theta(x^{(i)}) = (x^{(i)})^T \theta,我们可以很容易地证明:
\begin{align} X\theta - \vec{y} &= \begin{bmatrix} (x^{(1)})^T\theta \\ \vdots \\ (x^{(m)})^T \theta \\ \end{bmatrix} - \begin{bmatrix} y^{(1)}\\ \vdots\\ y^{(m)}\\ \end{bmatrix}\\ &= \begin{bmatrix} h_\theta (x^{(1)}) - y^{(1)}\\ \vdots\\ h_\theta (x^{(m)}) - y^{(m)}\\ \end{bmatrix}\\ \end{align}
对于一个向量zz,有zTz=∑iz2iz^Tz = \sum_i z_i^2,则:
\begin{align} \frac{1}{2} (X\theta - \vec{y})^T (X\theta - \vec{y}) &= \frac{1}{2} \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2 \\ &= J(\theta) \end{align}
最后要最小化JJ,我们要求解它关于θ\theta的导数:
\begin{align} \nabla_\theta J(\theta) &= \nabla_\theta \frac{1}{2} (X\theta - \vec{y})^T (X\theta - \vec{y})\\ &= \frac{1}{2} \nabla_\theta (\theta^T X^T X \theta - \theta^T X^T \vec{y} - \vec{y}^T X \theta + \vec{y}^T\vec{y})\\ &= \frac{1}{2} \nabla_\theta \mathrm{tr} (\theta^T X^T X \theta - \theta^T X^T \vec{y} - \vec{y}^T X \theta + \vec{y}^T\vec{y})\\ &= \frac{1}{2} \nabla_\theta (\mathrm{tr} \theta^T X^T X \theta - 2 \mathrm{tr} \vec{y}^T X \theta)\\ &= \frac{1}{2} (X^T X \theta + X^T X \theta - 2 X^T \vec{y})\\ &= X^T X \theta - X^T \vec{y}\\ \end{align}
为了最小化J(θ)J(\theta),我们要设法使其偏导数为零,这样就可推出正规方程:
X^T X \theta = X^T \vec{y}
那么权重矩阵θ\theta,应该调整为:
\theta = (X^T X)^{-1} X^T \vec{y}
举个例子,硝酸钠的溶解度试验中,测得不同温度x(单位:C)下,硝酸钠溶解于水中的溶解度y%的数据如下:
温度 | 0 | 4 | 10 | 15 | 21 | 29 | 36 | 51 | 68 |
---|---|---|---|---|---|---|---|---|---|
溶解度(%) | 66.7 | 71.0 | 76.3 | 80.6 | 85.7 | 92.9 | 99.4 | 113.6 | 125.1 |
求yy和xx的经验回归函数。
从上面的数据中可以,写出输入特征矩阵XX和目标变量矩阵y⃗ \vec{y}。
\begin{align} X &=\left[\begin{matrix}1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1\\0 & 4 & 10 & 15 & 21 & 29 & 36 & 51 & 68\\\end{matrix} \right]^T \\ \vec{y} &= [ \begin{matrix} 66.7 & 71.0 & 76.3 & 80.6 & 85.7 & 92.9 & 99.4 & 113.6 & 125.1 \end{matrix} ]^T \\ \end{align}
代入公式θ=(XTX)−1XTy⃗ \theta = (X^T X)^{-1} X^T \vec{y}中求解权重θ\theta的值,得:
\theta_0 = 67.5078, \qquad \theta_1 = 0.8706
于是所求的线性回归假设为:
y = 67.5078 + 0.8706x.
下图将训练样本和回归函数绘制在一起:
实现的python代码如下:
# coding=utf-8
import matplotlib.pyplot as plt
import numpy as np# 输入特征温度和标签溶解度
X = np.array([0 , 4, 10, 15, 21, 29, 36, 51, 68])
y = np.array([[66.7, 71.0, 76.3, 80.6, 85.7, 92.9, 99.4, 113.6, 125.1]])
# X转化为n*1的矩阵
X_0 = np.ones(len(X)).astype(dtype=np.int)
X_new = np.array([X_0, X])# 根据求参数公式theta = (X.T * X)^-1 * X.T * y求解
temp = np.matrix(np.dot(X_new, X_new.T))
ans_matrix = temp ** -1 * X_new * y.T
# 训练后的模型,提取截距和系数
intercept = np.array(ans_matrix)[0][0]
coef = np.array(ans_matrix)[1][0]
# x从0到70,y=ax+b
lx = np.arange(0, 70)
ly = coef * lx + intercept# 绘制拟合直线
plt.plot(lx, ly, color='blue')
# 绘制数据点和x轴y轴标题
plt.scatter(X, y, c='red', s=40, marker='o')
plt.xlabel('Temperature(C)')
plt.ylabel('Solubility(%)')
plt.show()
在特征维度少的情况下,正规方程组的计算会比梯度下降法快很多,推荐计算线性回归时多使用该方法。
正规方程组(The normal equations)相关推荐
- 线性规划、梯度下降、正规方程组——斯坦福ML公开课笔记1-2
转载请注明链接:http://blog.csdn.net/xinzhangyanxiang/article/details/9101621 最近在看Ng的机器学习公开课,Ng的讲法循循善诱,感觉提高了 ...
- 线性回归的梯度下降和正规方程组求解
1. 线性回归 在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析.这种函数是一个或多个称为回归系 ...
- Normal Equations 的由来
Normal Equations 的由来 假设我们有m个样本.特征向量的维度为n.因此,可知样本为{(x(1),y(1)), (x(2),y(2)),... ..., (x(m),y(m))},其中对 ...
- 梯度下降算法和正规方程组学习笔记
梯度下降算法学习笔记 内容来自于斯坦福大学<机器学习与数据挖掘公开课>. 介于算法中用到了许多线性代数的知识.所以我感觉有必要先对线性代数的基础知识做一个回顾和梳理. 1基础概念和记号 线 ...
- Normal Equations 的由来与推导
http://blog.csdn.net/huruzun/article/details/41493063
- 机器学习(2)之正规方程组
上一章介绍了梯度下降算法的线性回归,本章将介绍另外一种线性回归,它是利用矩阵求导的方式来实现梯度下降算法一样的效果. 1. 矩阵的求导 首先定义表示m×n的矩阵,那么对该矩阵进行求导可以用下式表示,可 ...
- 机器学习(一)——线性回归、分类与逻辑回归
http://antkillerfarm.github.io/ 序 这是根据Andrew Ng的<机器学习讲义>,编写的系列blog. http://www.cnblogs.com/jer ...
- MIT 线性代数(16—18)读书笔记
第十六讲 投影矩阵(Ax=b)和最小二乘法 上一讲中,我们知道了投影矩阵P=A(ATA)−1ATP=A(A^TA)^{-1}A^TP=A(ATA)−1AT,PbPbPb将会把向量投影在AAA的列空间中 ...
- 直线回归和相关------(一)回归和相关的概念与直线回归(含最小二乘推导)
一.回归与相关的概念 (1)函数关系与统计关系:两个或两个以上变数之间的关系可分为两类:函数关系和统计关系 函数关系是一种确定性关系,即一个变数的任一变量必与另一个变数的一个确定的数值相对应.两者之间 ...
最新文章
- Deep TEN: Texture Encoding Network
- Android平台利用OpenCL框架实现并行开发初试
- 计算机基础与应用(上)笔记总结,计算机基础学习心得体会范文(通用3篇)
- atcoder题目合集(持续更新中)
- MySQL DDL--MySQL 5.7版本Online DDL操作
- .NET Core with 微服务 - 什么是微服务
- BDD(行为驱动开发)
- 蛮力法 字符串匹配
- LeetCode For SQL 184. 部门工资最高的员工 (分组 from嵌套)
- 【图像压缩】基于matlab BP神经网络图像压缩【含Matlab源码 741期】
- 【转】余弦相似度及基于python的三种代码实现、与欧氏距离的区别
- fatal: unable to access 'https://github.com:***' 或者本机ping不通github.com解决方法
- 前端进阶(1)Web前端性能优化
- Idea格式化mybatis框架mapper文件
- 微信表情包的制作以及50*50像素图片太模糊的处理方法
- 弹孔,血迹 等受击表现
- 2018年最新bluehost主机(中文站)购买教程,送30%优惠码!
- 听声音做钥匙?!慢放开锁音轨,黑客就能破解常用门锁
- 香农费诺编码 c语言实现,对于香农编码、费诺编码和哈夫曼编码,编码方法惟一的是()。...
- 如何安装husky_利用huskylint-staged构建代码检查工作流