吴恩达机器学习:线性回归

首先说一些关于课程的题外话。对于 Ng 的这个课程,笔者没有选择在 Coursera 上学习课程,一来是因为 Coursera 有自己的课程周期,但这个周期不一定适合所有人。其次 Coursera 的课程作业是使用 Octave 语言,而笔者个人觉得不管是学习还是未来使用 Python 都会是更合适的语言。所以最笔者选择了 课程视频 + Python 实现作业 的形式。

点击 课程视频 你就能不间断地学习 Ng 的课程,关于课程作业的 Python 代码已经放到了 Github 上,点击 课程代码 就能去 Github 查看,代码中的错误和改进欢迎大家指出。

以下是 Ng 机器学习课程第一周的笔记。

机器学习

什么是机器学习?Arthur Samuel 给出的一个非正式定义是:不通过明确地编程,使计算机拥有通过学习解决问题的能力。
机器学习的算法包括 监督学习无监督学习强化学习推荐系统等。我们第一周学习的 线性回归 属于 监督学习

回归问题

学习的目的是为了解决问题。回归问题是非常常见的一类问题,目的是为了找寻变量之间的关系。比如要从数据中找寻房屋面积与价格的关系,年龄与身高的关系,气体压力和体积的关系等等。而机器学习要做的正是要让机器自己来学习这些关系,并为对未知的情况做出预测。

监督学习的工作方式

首先要有一个训练数据集( Training Set ),其中包含数据对应问题的正确结果。通过我们的学习算法 ( Learning Algorithm ) 学习训练数据集,最终获得一个函数 ( Hypothesis ),这个函数就是我们需要的 预测函数,能够对 训练集的数据 与 其它数据输入 做出比较准确的预测。
这里写图片描述
对于 线性回归 ,我们的 Hypothesis 就是:
h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n = θ T x h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+\dots+\theta_nx_n=\theta^Tx hθ(x)=θ0+θ1x1+θ2x2++θnxn=θTx
其中的 θ i \theta_i θi 就是学习算法需要学习的参数,而 x i x_i xi 是我们对于问题所选取的特征。

代价函数

那么如何学习 预测函数 中的 θ i \theta_i θi 呢?我们需要引入 代价函数 的概念,它的作用是评估真实与预测值之间的差异。一旦有了这个函数,学习算法的目标就是找到 θ i \theta_i θi 使得这个函数的值尽可能的小。对于 线性回归,我们使用的 代价函数 是:
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{2m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 J(θ)=2m1i=1m(hθ(x(i))y(i))2
其中 m m m 是样本数, y y y 是训练数据集已知答案,上标 i i i 表示第几组训练数据,代价函数 J ( θ ) J(\theta) J(θ) 是关于 θ \theta θ 的函数。当然为了是表达更简洁、编写的程序更加清晰,我们通常会使用它的矩阵表达:
J ( θ ) = 1 2 m ( X θ − y ) T ( X θ − y ) J(\theta)=\frac{1}{2m}(X\theta-y)^T(X\theta-y) J(θ)=2m1(Xθy)T(Xθy)
式中 X X X 为所有训练特征数据组成的矩阵, y y y 为训练数据集已知答案的列向量:
KaTeX parse error: Undefined control sequence: \ at position 262: …rix} \ \ \ \ \ \̲ ̲y=\begin{bmatri…
最后为了承上启下,我们来看看当特征只有一个的时候,代价函数 J ( θ ) J(\theta) J(θ) 的样子。
这里写图片描述
右图是 J ( θ ) J(\theta) J(θ) 的等高图,每一条线表示 代价函数 的值相同,红 X 表示 代价函数 的最低点。

梯度下降算法

接着刚刚看的单个特征所对应的 代价函数 图像加上之前所说的 “学习算法的目标就是找到 θ i \theta_i θi 使得 代价函数 尽可能的小” 。一个很直观的想法就是,在坡上任意取一点,然后沿着下坡方向走最后到达最低点。这也正是梯度下降算法的思路,我们沿着梯度的反向更新 θ i \theta_i θi 的值( 沿着最陡的方向下坡 ),直到 代价函数 收敛到最小值。梯度下降算法更新 θ i \theta_i θi 的方式为:

θ i : = θ i − α ∂ ∂ θ i J ( θ ) \theta_i := \theta_i-\alpha\frac{\partial}{\partial\theta_i}J(\theta) θi:=θiαθiJ(θ)

其中 α \alpha α 为学习率, : = := := 表示使用右式的值替换 θ i \theta_i θi 原有的值。对于 线性回归,我们更新 θ i \theta_i θi 的方式为:

θ : = θ − α 1 m X T ( X θ − y ) \theta := \theta - \alpha\frac{1}{m}X^T(X\theta-y) θ:=θαm1XT(Xθy)

到这里我们就能够完成整个 线性回归 的机器学习算法了。设定 θ i \theta_i θi 的初始值,使用梯度下降算法迭代更新 θ i \theta_i θi 的值,直到 J ( θ ) J(\theta) J(θ) 收敛。至于为什使用梯度的反向可以看 这篇文章,作者从数学角度解释了原因。

正规方程

对于 线性回归,我们完全可以使用数学方法来得到 J ( θ ) J(\theta) J(θ) 取最小值时 θ i \theta_i θi 的值。这涉及一些导数和线性代数的知识,有兴趣的同学可以详细看课程视频中的推导过程。这里直接给出求解 θ \theta θ 的公式:

θ = ( X T X ) − 1 X T y \theta=(X^TX)^{-1}X^Ty θ=(XTX)1XTy

在使用时 正规方程 有一定的限制,比如 X T X X^TX XTX 矩阵需要是可逆的。那么有了直接求解问题的方法,为什么我们还需要梯度下降的概念呢?因为梯度下降方法更具有广泛性,可以用于很多 问题的求解,比如非线性的 代价函数

特征标准化

在实际的运用中我们选取的特征,比如长度,重量,面积等等,通常单位和范围都不同,这会导致梯度下降算法变慢。所以我们要将特征缩放到相对统一的范围内。通常的方法有 StandardizationNormalizationStandardization 是把数据变成符合标准正态分布,即使原来是些奇奇怪怪的分布,由 中心极限定理 可知,数据量够大,一样变成正态,更新公式为:

x i : = x i − μ δ x_i := \frac{x_i-\mu}{\delta} xi:=δxiμ

Normalization 对于梯度下降算法友好,可能可以让算法最终收敛并且提高训练速度和精度,更新公式为:

x i : = x i − m i n ( x i ) m a x ( x i ) − m i n ( x i ) x_i := \frac{x_i-min(x_i)}{max(x_i)-min(x_i)} xi:=max(xi)min(xi)ximin(xi)

多项式回归

有时候线性的 Hypothesis 不一定合适我们需要拟合的数据,我们会选择多项式拟合例如:

h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 x 2 + θ 4 x 1 2 + θ 5 x 2 2 h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_1x_2+\theta_4x_1^2+\theta_5x_2^2 hθ(x)=θ0+θ1x1+θ2x2+θ3x1x2+θ4x12+θ5x22

这时候我们可以将它转化为 线性回归 问题,只要令新的特征 x 3 = x 1 x 2 x_3=x_1x_2 x3=x1x2 x 4 = x 1 2 x_4=x_1^2 x4=x12 x 5 = x 2 2 x_5=x_2^2 x5=x22 就可以了。

So~,第一周的内容就是这些了,谢谢大家耐心阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值