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

Posted zuguorui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了吴恩达机器学习——线性回归相关的知识,希望对你有一定的参考价值。

文章目录

前言

自己从前段时间开始学习机器学习的相关知识,看了一些经典的书籍,但书上讲的总归有些晦涩,看到大家在推荐吴恩达的课程,于是去看了,发现确实很不错,有很多书上难懂的公式,其实视频里十几分钟就讲明白了,效率很高。这个博客会作为一个系列,用来讲解自己做的编程练习题,为同样正在入门的同学提供一些思路,也为自己做一个备忘。这个系列文章不会讲解课程视频中已经出现的知识点,这就有点工作量太大了,也不会出现绘图等相关性不大的东西。一切以课后练习为主。

一、单变量线性回归

该测试对应于文件ex1。

单位矩阵

该文件对应的是warmUpExercise.m文件,目的是使用matlab生成单位矩阵。单位矩阵是从左上角到右下角这条线上的元素全为0,其他元素都为0,且行数列数相等的矩阵,matlab中使用eye()函数来生成单位矩阵。

代价函数

该文件对应computeCost.m文件。函数原型为computeCost(X, y, theta),X是样本的横坐标,y是样本的纵坐标。theta则是我们最终要求出的参数。
单变量线性回归我们知道就是求一条直线,使得该直线能够准确地沿着样本的分布。这条直线的方程显然就是一个一元一次方程:
y = θ 1 + θ 2 ∗ x y = \\theta_1 + \\theta_2*x y=θ1+θ2x
此处我们首先按照标量的方式来看这个公式。后面为了计算方便,有时候会直接使用矩阵运算来进行,到时候要按照传入的x和theta形式来灵活修改。
OK,先明确一下目的,以往我们的目标是放眼在x和y上,但这里我们的目标是找到一条直线,也就是theta1和theta2,来使得训练集中所有的点距离这条直线的距离总和最短。
那么显然的,我们的公式应该如下所示:
c o s t = 1 2 m ∑ i = 1 m ( θ 1 + θ 2 x i − y i ) 2 cost=\\frac12m\\sum_i=1^m(\\theta_1 + \\theta_2x_i - y_i)^2 cost=2m1i=1m(θ1+θ2xiyi)2
其中,m是样本数量。在测试中,X是一个m行1列的矩阵,y也是同样。
X = [ x 1 x 2 . . . x m ] \\bmX=\\beginbmatrixx_1\\\\x_2\\\\...\\\\x_m\\endbmatrix X=x1x2...xm
y = [ y 1 y 2 . . . y m ] \\bmy=\\beginbmatrixy_1\\\\y_2\\\\...\\\\y_m\\endbmatrix y=y1y2...ym
而theta则是一个1行2列的矩阵。
θ = [ θ 1 θ 2 ] \\bm\\theta=\\beginbmatrix\\theta_1\\\\\\theta_2\\\\\\endbmatrix θ=[θ1θ2]

由于我们使用matlab,不能按照平时写代码的思路去考虑矩阵计算。最方便的就是使用matlab强大的数学计算功能(不得不说有时候太强了反而不是很容易用)。为了使用简便的矩阵运算,测试文件中为X添加了一列全是1,即传入函数的X的形式是
X = [ 1 x 1 1 x 2 . . . . . . 1 x m ] \\bmX=\\beginbmatrix1&x_1\\\\1&x_2\\\\...&...\\\\1&x_m\\endbmatrix X=11...1x1x2...xm

如此我们可以得出

X ∗ θ − y = [ θ 1 + θ 2 x 1 − y 1 θ 1 + θ 2 x 2 − y 2 . . . θ 1 + θ 2 x m − y m ] \\bmX*\\theta-y=\\beginbmatrix\\theta_1 + \\theta_2x_1 - y_1\\\\\\theta_1 + \\theta_2x_2 - y_2\\\\...\\\\\\theta_1 + \\theta_2x_m - y_m\\endbmatrix Xθy=θ1+θ2x1y1θ1+θ2x2y2...θ1+θ2xmym

如此,我们将这些转换为matlab代码,其实就两行

d = y - X * theta;
J = sum(d .* d) / (2 * m);

d就是我们的式1,由于最终需要平方,所以谁减谁都无所谓,但是矩阵的乘法顺序不能搞错,因为矩阵运算不满足交换律。
对于平方,我直接使用了点乘,当然矩阵平方是可以使用d.^2这样的形式。最终的J就是我们计算出的代价。

寻找全局最小值

我们最终的目的是使得cost最小。寻找全局最小值的函数就是gradientDescent(X, y, theta, alpha, num_iters),alpha是我们的步进大小,num_iters则是我们总共计算的步数。X、y、theta的形式都和上面相同。
课程中已经讲过,寻找全局最小值就是沿着 θ 1 \\theta_1 θ1 θ 2 \\theta_2 θ2下降的方向进行寻找。那么自然免不了要对 θ 1 \\theta_1 θ1 θ 2 \\theta_2 θ2进行求导。
为了方便理解,这次我们按照测试文件中X的形式表达cost,即X的第一列全是1。
c o s t = 1 2 m ∑ i = 1 m ( θ 1 x i 1 + θ 2 x i 2 − y i ) 2 cost=\\frac12m\\sum_i=1^m(\\theta_1x_i1 + \\theta_2x_i2 - y_i)^2 cost=2m1i=1m(θ1xi1+θ2x以上是关于吴恩达机器学习——线性回归的主要内容,如果未能解决你的问题,请参考以下文章

吴恩达机器学习11:线性回归和多变量

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

吴恩达《机器学习》课程总结多变量线性回归

吴恩达《机器学习》课程总结_多变量线性回归

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

吴恩达-机器学习+多特征线性回归梯度下降