吴恩达Coursera机器学习 - Chapter 2 单变量线性回归
Chapter 2 - 单变量线性回归(Linear Regression with One Variable)
定义
单变量 | 数据集或假设函数的特征值只有一个 |
---|---|
线性回归 | 求解回归问题的方程是线性方程(自变量仅为一次) |
模型建立
假设函数
以下图所示的训练集为例:
假设:
- m代表训练集中实例的数量(4个)
- x 代表特征/输入变量(大小/平方尺)
- y 代表目标变量/输出变量(价格/1000美元)
- (x, y) 代表训练集中的实例
- (x (i), y (i)) 代表第i个观察实例(如i=2时,为(1416, 232))
- h代表学习算法的函数,也称为假设(hypothesis)
对于单变量线性回归问题,我们一般将其假设为:$h_\theta(x)=\theta_0+\theta_1x$
那么问题来了,假设了$h(x)$函数后,怎么求θ组合($\theta_{0}$和$\theta_{1}$)呢?
一般而言,思想是将现有的$x$集代入$h(x)$,比较各$y$值与$h(x)$值之间的误差(建模误差)。在不断调整$θ$组合后,找到使得总误差最小的那个θ组合。而衡量误差的方法是建立代价函数。(可能讲解的不规范,见谅 ̄□ ̄||)
代价函数(平方误差函数)
$$J\left( \theta_{0}\ ,\theta_{1}\ \right) = \frac{1}{2m}\sum_{i = 1}^{m}{\left(h_{\theta}( x^{(i)}) - y^{(i)}\right)}^{2}$$
这个函数看起来有点像方差的计算公式,但还是有区别的……
首先,它不是和平均值作比较,而是和“标准答案”作比较。再次,算出平方和后的式子乘以$\frac{1}{2m}$而非$\frac{1}{m}$。
疑问:为什么乘的是$\frac{1}{2m}$?猜想:可能是因为后面梯度下降算法计算$min(J\left( \theta_{0},\ \theta_{1}\ \right))$时,会求偏导,从而消去分母中的2。
既然有了代价函数,我们如何求他的最小值呢?
针对二元函数求最小值/极值,在高等数学里,在有约束条件和无约束条件下,分别提供了两种求解的办法,概括来讲,前者就是拉格朗日乘数法,后者则是计算二阶偏导后判断。这当然不能满足我们这门课的要求啦,下面将介绍一种很重要的新方法,梯度下降!
梯度下降
该算法的公式如下:
$repeat\ until\ convergence\ \{\\ \quad \theta_j :=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)\quad(for\ j=0\ and\ j=1)\\\}$
这里引入了一个新的变量,学习率α。我们可以将这个公式类比为一次函数$y = kx+b$。
- $\frac{\partial}{\partial\theta_{j}}J(\theta_{0},\theta_{1})$即为斜率k;
- α代表一次迭代中,在$\theta_{j}$方向上应该移动多大程度;
- 而:=右边的和左边的$\theta_{j}$分别代表这次迭代前和后的$\theta_{j}$值。
对于大括号内的式子,我是这样理解的:在每次迭代中,先算出$\theta_{0},\theta_{1}$在各自方向上,应移动多大的距离才能使代价函数下降的最大,全部算完后同时更新各$\theta_{j}$的值。(若不同时,一次迭代中$\theta$集会变化多次,求出来的$\theta$也就失去了意义)
整个式子会一直重复下去,直至各$\theta_{j}$收敛到某个值,这就是我们需要的$\theta$组合(之一)!
疑问:既然梯度下降算法只能求出局部最小值,那如何求解全局最小值呢?猜想:首先,在单变量线性回归问题中,或许$J\left( \theta_{0}\ ,\theta_{1}\ \right)$的局部最小值就是全局最小值(没证明过,不确定)。但如果在其他回归问题的方程中就不一定了,这时候,正如课程中所说,我们应尝试完所有的参数组合(或尽可能多吧),求出所有局部最小值,并比较其中某个参数组合是否为全局最小值。
问题又来了,怎么判断$θ_j$是否收敛,α又该怎么取?
这个问题其实在第四章会回答。对于前者,一种$\theta_{j}$收敛的判断依据是:代价函数$J\left(\theta_{0}\ ,\theta_{1}\right)$的变化低于某一阈值。因为即便学习率α不变,随着J(θ)的减小,$\frac{\partial}{\partial\theta_{j}}J(\theta_{0},\ \theta_{1})$也会减小(在α值合适时),如下图。我们假设在第300~400次迭代的过程中,某次迭代后,$J\left(\theta_{0}\ ,\theta_{1}\right)$变化小于该阈值,就退出循环,输出$\theta$组合。
α的取值会对迭代次数和 $J\left( \theta_{0}\ ,\theta_{1}\right)$是否能收敛产生很大影响,Andrew Ng老师给的建议是尝试不同的α值:0.01, 0.03, 0.1, 0.3, 1, 3等
- 求解θ组合
最后一步(算是),我们将代价函数代入梯度下降函数内。在此之前,要解决的是$\frac{\partial}{\partial\theta_{j}}J(\theta_{0},\theta_{1})$的求解。这里需要高等数学中求偏导的基础知识,计算过程就省略不写了。
回头整理梯度下降的算法,我的第一个机器学习算法就诞生啦!名为“批量梯度下降”: