吴恩达机器学习——线性回归
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+θ2∗x
此处我们首先按照标量的方式来看这个公式。后面为了计算方便,有时候会直接使用矩阵运算来进行,到时候要按照传入的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=1∑m(θ1+θ2xi−yi)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+θ2x1−y1θ1+θ2x2−y2...θ1+θ2xm−ym⎦⎥⎥⎤
如此,我们将这些转换为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=1∑m(θ1xi1+θ2x以上是关于吴恩达机器学习——线性回归的主要内容,如果未能解决你的问题,请参考以下文章