您的位置:首页 > 其它

第一周-Coursera/Stanford机器学习课程学习笔记-单变量线性回归

2016-04-14 22:09 281 查看
无名之人,希望自己能够踏踏实实地努力,在进步的路上看清自己的每一个脚印。

介绍

Coursera上面的机器学习课程是由Stanford大学的Andrew Ng(中文名:吴恩达)老师教授的。之前并不了解他,也是跟着上了这门课程后才知道这么个牛人。废话不多说,赶紧把第一周机器学习的笔记整理一下。

机器学习的定义

课程材料中提到了Arthur Samuel给机器学习的定义,比较通俗却不严谨:

The field of study that gives computers the ability to learn without being explicitly programmed.

研究不经精确编程而使得计算机具有学习能力的领域。

Tom Mitchell提供了更为现代的定义:

A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.

一个电脑程序,如果它执行任务T的性能(由P来评估)通过经验E得到了提升,则可以说:就某些种类的任务T和性能评估P而言,此程序能够从经验E中学习。

举个栗子:西洋棋游戏。

E = 玩很多西洋棋游戏的经验

T = 下好西洋棋

P = 程序在下局游戏中获胜的可能

监督式学习

在监督式学习supervised learning中,对于已知的数据集,我们已经知道正确的输入应该是什么样的,并且已知输入输出之间存在某种关系。主要可分为回归Regression分类Classification

在回归问题中,通过将输入变量映射到某种连续函数,获得连续输出以预测结果。

在分类问题中,通过将输入变量映射到离散的类别中,以预测离散的输出。

举个栗子:

回归 - 根据已有房子面积和房子价格的数据集,预测某个房子的价格;

分类 - 同样的数据集,将输出更改为“房子的价格是否比购房子提出的价格高或低”。

非监督式学习

在非监督式学习unsupervised learning中,我们对输出结果所知甚少,或者一无所知。在过程中,并没有预测结果以获得反馈。比如,我们可以通过聚类从输入变量之间的关系中获得结构。这里不举栗子了,栗子好沉。

单变量线性回归

单变量线性回归 - Univariate linear regression,通过单一输入变量预测单一输出值。因此需要根据数据集求取输出变量和输入变量的函数表达式。

假设函数 The Hypothesis Function

单变量线性回归的假设函数的一般形式为:

hθ(x)=θ0+θ1xh_\theta(x) = \theta_0 + \theta_1 x

其中hθ(x)h_\theta(x)和xx分别为数据集的输出和输入值,求解假设函数就是根据数据集求得最优的θ0\theta_0和θ1\theta_1,这便引出了损失函数

损失函数 Cost Function

损失函数能够评价假设函数的准确度,其一般形式为:

J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2J(\theta_0, \theta_1)=\dfrac {1}{2m} \displaystyle \sum _{i=1}^m \left (h_\theta (x^{(i)}) - y^{(i)} \right)^2

其中,mm表示数据集包含的样本数量,x(i),y(i)x^{(i)}, y^{(i)}表示数据集中第ii个样本。从式子可以很容易看出来,损失函数就是预测值与实际值之差的平方的平均值……的一半。所以又被称为均方差 - mean squared error,不过这里的均方差和统计学中的均方差在形式上略有差别。

很明显,使得损失函数取最小值的θ0,θ1\theta_0, \theta_1就是最优解。

对于单变量线性回归,可以证明其代价函数在直角坐标系中的形状为碗形,如图2.1所示:


图2.1 单变量线性回归的代价函数图像
因此,可以用梯度下降法进行最优化。

梯度下降法 Gradient Descent

通过对损失函数进行求导,使导数为0的θ0,θ1\theta_0, \theta_1就是最优解。在实际计算时采用梯度下降法,其方程式为:

重复下式直至收敛:

θj:=θj−α∂∂θjJ(θ0,θ1)\theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} J(\theta_0, \theta_1)

其中 j= {0, 1}。

一些解释:

这个符号:=:=表示“定义为”,详见维基百科的解释。

α\alpha为学习速率 - Learning rate,它的大小决定了收敛的快慢和效果。

针对单变量线性回归的梯度下降法

将上面这些结合一下,可得到针对单变量线性回归的梯度下降法

重复下式直至收敛:

temp0:=θ0−α1m∑i=1m(hθ(x(i))−y(i))temp1:=θ1−α1m∑i=1m((hθ(x(i))−y(i))x(i))θ0:=temp0θ1:=temp1\begin{align}
& temp_0 := \theta_0 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m}(h_\theta(x^{(i)}) - y^{(i)}) \\
& temp_1 := \theta_1 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m}\left((h_\theta(x^{(i)}) - y^{(i)}) x^{(i)}\right) \\
& \theta_0 := temp_0 \\
& \theta_1 := temp_1
\end{align}

在进行计算时一定要按照上述步骤进行计算,即同步更新,根据上次迭代得到的(θ0,θ1\theta_0, \theta_1)分别计算temp0,temp1temp_0, temp_1,然后再赋值给(θ0,θ1\theta_0, \theta_1)。

学习速率α\alpha对迭代速度和效果的影响

α\alpha过大,很可能会导致梯度下降法无法收敛,也就是说每一步迭代计算出来的代价函数值逐渐增加而不是下降。

α\alpha过小,一般不会影响能否收敛,但会导致梯度下降法速度过慢,需要更多的迭代步骤才能获得最优解。

合适的α\alpha能保证梯度下降法以较少的迭代步骤收敛。

对于合适的α\alpha而言,即使在每一步迭代中都保持α\alpha固定不变,梯度下降法也能收敛到局部最小值(对于单变量线性回归,只有一个极小值,不存在其他的局部最小值)。

不过,在实际计算中,需要多次尝试才能获得较好的学习速率α\alpha。一般(举个栗子)以(0.01, 0.03, 0.1, 0.3, 1, …)对α\alpha进行尝试。一种直观的方法是,在计算的过程中plot某个α\alpha下J(θ)J(\theta)与迭代次数的图像,以观察收敛好坏,例如图2.2所示:


图2.2 某个α\alpha下损失函数VS迭代次数

What`s next?

多变量线性回归的梯度下降法编程求解 VS Normal Equations

Matlab替代性软件Octave简介
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: