---
title: 斯坦福机器学习-线性回归
photos:
- http://7xrw7v.com1.z0.glb.clouddn.com/bb2cf32cadac65e934ab587c5f456329.png
tags:
- 斯坦福机器学习
date: 2016-09-05 16:34:34
---
摘要:
- 单变量线性回归
- 代价函数
- 梯 度 下 降
- 学习率
- 多 变 量 线 性 回 归
- 特 征 缩 放
- 多 项 式 回 归
- 正 规 方 程
<!--more-->
不积跬步,无以至千里;不积小流,无以成江海。”
——荀子《劝学篇》
这句话写在开头,以作警示。
未来几天,将男神:Andrew Ng 的机器学习视频过一遍,该系列博客主要来自视频及网上Ryan Cheung的笔记。
### 单变量线性回归 LINEAR REGRESSION WITH ONE VARIABLE
#### 模 型 表 达 MODEL REPRESENTATION
假使我们回归问题的训练集(Training Set)如下表所示:
![](http://7xrw7v.com1.z0.glb.clouddn.com/73c6b4e5a7705360cda20eff49dead22.png)
我们将要用来描述这个回归问题的标记如下:
![](http://7xrw7v.com1.z0.glb.clouddn.com/be3df77f13e39781bbfc35c14d344ff1.png)
![](http://7xrw7v.com1.z0.glb.clouddn.com/8dca07a0928836e4c08a3ac70d6c47b9.png)
因而,要解决房价预测问题,我们实际上是`要将训练集“喂”给我们的学习算法,`进而学习得
一个假设 h,然后将我们要预测的房屋的尺寸作为输入变量输入给 h,预测出该房屋的交易价
格作为输出变量输出为结果。
对于我们的房价预测问题,我们该如何表达 h?
一种可能的表达方式为:![](http://7xrw7v.com1.z0.glb.clouddn.com/cb9cbe7a8bbf807e946625171e960672.png)
`因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题。`
#### 代 价 函 数 ( COST FUNCTION)
现在要做的便是为我们的模型选择
合适的参数(parameters)$θ_0$ 和$θ_1$ 。
在房价问题这个
例子中便是在 y 轴上的截距和直线的斜率。
我们选择的参数决定了我们得到的直线相对于我们的训练集的准确程度,模型所预测的值与训
练集中实际值之间的差距(下图中蓝线所指)就是`建模误差(modeling error)。`
![](http://7xrw7v.com1.z0.glb.clouddn.com/4bf409d21695a63dec094e9e7ba487e4.png)
`我们的目标:`
选择出可以使得建模误差的平方和能够最小的模型参数。
即:使得`代价函数`![](http://7xrw7v.com1.z0.glb.clouddn.com/237776bde0b15795cc0954d0edfaa23f.png)最小。
我们绘制一个等高线图,三个坐标分别为$θ_0$ 和$θ_1$ 和 $J(θ_0, θ_1 )$:
![](http://7xrw7v.com1.z0.glb.clouddn.com/dedd34eaf4ffb44031cecc5c485cd9dd.png)
可以看出在三维空间中存在一个使得 $J(θ_0, θ_1 )$最小的点。
![](http://7xrw7v.com1.z0.glb.clouddn.com/c87a08e34628b75b929e4c42bada5fe5.png)
#### 梯 度 下 降 ( GRADIENT DESCENT)
为了求代价函数$J(θ_0, θ_1 )$的最小值,我们将使用梯度下降算法。
梯度下降是一个用来求函数最小值的算法。
梯度下降算法的思想:
![](http://7xrw7v.com1.z0.glb.clouddn.com/5b50132c0be823bd52f939050ee25734.png)
![](http://7xrw7v.com1.z0.glb.clouddn.com/9877c74194eff74b247555aa7376fa2a.png)
##### 批量梯度下降(batch gradient descent)算法
![](http://7xrw7v.com1.z0.glb.clouddn.com/dfe92fc85f0cd7d85ed771235e5a10d6.png)
其中`α是学习率(learning rate)`,它决定了我们沿着能让代价函数下降程度最大的方向向下迈
出的步子有多大,在批量梯度下降中,我们每一次都同时让所有的参数减去学习速率乘以代价
函数的导数。
#### 对 线 性 回 归 运 用 梯 度 下 降 法
对我们之前的线性回归问题运用梯度下降法,`关键在于求出代价函数的导数,`即:
![](http://7xrw7v.com1.z0.glb.clouddn.com/1957e346e9c2205084bfa13262ffaec2.png)
![](http://7xrw7v.com1.z0.glb.clouddn.com/cc634ab0911b9e5fdf90a3a9f539c492.png)
![](http://7xrw7v.com1.z0.glb.clouddn.com/929a7dab00fc05cbdc9b939ec07a2ec0.png)
注意:对于凸函数(convex function)只有一个全局最优解。
### 多 变 量 线 性 回 归
#### 多 维 特 征 ( MULTIPLE FEATURES)
现在我们对房价模型增加更多的特征,例如
房间数楼层等,构成一个含有多个变量的模型,模型中的特征为(x 1 ,x 2 ,...,x n )。
![](http://7xrw7v.com1.z0.glb.clouddn.com/e6888adc50af3e60378e7bf94ac5d51a.png)
![](http://7xrw7v.com1.z0.glb.clouddn.com/d936b216cc8e8af416254da51b1fe7f0.png)
支持多变量的假设 h 表示为:
![](http://7xrw7v.com1.z0.glb.clouddn.com/bb07e6c00c62a26fff4bf38f713bcb8b.png)
引入$X_0$=1
![](http://7xrw7v.com1.z0.glb.clouddn.com/6615106f1da64c63368bb7406a8c9155.png)
此时模型中的参数是一个 n+1 纬的向量,任何一个训练实例也都是 n+1 纬的向量,特征矩阵
X 的纬度是 m*(n+1)。
因此公式简化为:
![](http://7xrw7v.com1.z0.glb.clouddn.com/b03b7668b63a8aa1fa853f7a2d7e085f.png)其中上标 T 代表矩阵转置。
#### 多 变 量 梯 度 下 降 ( GRADIENT DESCENT FOR MULTIPLE VARIABLES)
在多变量线性回归中,我们也构建一个代价函数,则这个代价函数
是所有建模误差的平方和,即:
![](http://7xrw7v.com1.z0.glb.clouddn.com/49c0c24e67b30da7ebe919d9351d4af2.png)
`我们的目标:`找出使得代价函数最小的一系列参数。
`多变量线性回归的批量梯度下降算法为:`
![](http://7xrw7v.com1.z0.glb.clouddn.com/0eb341cbbd759c101dc654c414876369.png)
即:
![](http://7xrw7v.com1.z0.glb.clouddn.com/d9008bae69016724fcf434e0e1ed127f.png)
求导数后得到:
![](http://7xrw7v.com1.z0.glb.clouddn.com/4265396384c7510aa89a3e82cffc51a3.png)
我们 开始随机选择一系列的参数直,计算所有的预测结果后,再给所有的参数一个新的值,如此循环直到收敛。
#### 特 征 缩 放 ( FEATURE SCALING)
`面对多维特征问题的时候,我们要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。`
例子:
房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的直为 0-2000 平方英尺,而房间数量的直则是 0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
![](http://7xrw7v.com1.z0.glb.clouddn.com/66c0544a8ad1140f07f09c565bd333b8.png)
![](http://7xrw7v.com1.z0.glb.clouddn.com/14a49ba53cc09749621f6c837716f972.png)
#### 学 习 率 (LEARNING RATE)
我们可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。
![](http://7xrw7v.com1.z0.glb.clouddn.com/c28d8c9c51c4b7138aab24e3f8ee2ad4.png)
`其他方法:`
也有一些自动测试是否收敛的方法,例如将代价函数的变化直与某个阀直(例如 0.001)进行比较,
但通常看上面这样的图表更好。
- 如果学习率α过小,则达到收敛所需的迭代次数
会非常高
- 如果学习率α过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致
无法收敛。
通常可以考虑尝试这些学习率:
$\alpha$ = 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1, 3, 10
### 多 项 式 回 归 ( POLYNOMIAL REGRESSION)
线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,比如一个二次方模型:
![](http://7xrw7v.com1.z0.glb.clouddn.com/24f0d9e6c6e035b668030e76167e9776.png)
或者三次方模型:
![](http://7xrw7v.com1.z0.glb.clouddn.com/8ed43e9ff8d9b2746ab9bd702a184eec.png)
![](http://7xrw7v.com1.z0.glb.clouddn.com/ca01b038d3afca5f275e823f4471f8f6.png)
通常我们需要先观察数据然后再决定准备尝试怎样的模型。
方法:我们可以令
![](http://7xrw7v.com1.z0.glb.clouddn.com/c9c07272348a20e2f5f0d86d38f4f97e.png)
从而将模型转化为线性回归模型。
`注:如果我们采用多项式回归模型,在运行梯度下降算法前,
特征缩放非常有必要。`
### 正 规 方 程 ( NORMAL EQUATION)
到目前为止,我们都在使用梯度下降算法,但是对于某些线性回归问题,正规方程方法是更好的解决方案。
`正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:`
![](http://7xrw7v.com1.z0.glb.clouddn.com/f4963307a27d5554ae0113c924c8e110.png)
假设我们的训练集特征矩阵为 X(包含了 x 0 =1)并且我们的训练集结果为向量 y,则利用正规
方程解出向量
![](http://7xrw7v.com1.z0.glb.clouddn.com/74c6fdd54aa8aaeb56fe72b3fba78046.png)
上标 T 代表矩阵转置,上标-1 代表矩阵的逆。
#### 例子
以下表所示数据为例:
![](http://7xrw7v.com1.z0.glb.clouddn.com/ddd9a6382bbab5ebf4ae656b0a6daad7.png)
运用正规方程方法求解参数:
![](http://7xrw7v.com1.z0.glb.clouddn.com/e4ad4eaab52da9c8e421ff1a33fa1b14.png)
在 Octave 中,正规方程写作:pinv(X‘*X)*X‘*y
```
注:对于那些不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺
为单位的尺寸和米为单位的尺寸两个特征,也有可能是特征数量大于训
练集的数量),正规方程方法是不能用的。
```
#### 梯度下降与正规方程的比较
![](http://7xrw7v.com1.z0.glb.clouddn.com/19893cefee6385ccd1c1228d9b4b7e9a.png)