这一讲说到了线性回归(Linear Regression)
线性回归是一种监督式学习。我们给机器一些带标签的数据,然后机器用这些带标签的数据学习。
1.从一个例子入手
首先Ng老师举了个例子:
这是有关于房价预测的例子。
图中的点横坐标是面积,从纵坐标是房价, 我们要做的事情是想找到一个模型,让这个模型更好的符合当前的房价与面积的对应关系,之后我们用这个模型简单的预测房价。
首先,我们有一些training set
我们用一些符号让我们之后的表述更清楚。
如果有4000条数据, m = 4000
x = [2104, 1416, 1534, 852 ... ]
y = [460, 232, 315, 178 ...]
(x^(i), y^(i))表示第i条数据
x^(i) = 2104, y^(i) = 460
2.我们要做什么
第一步拿到训练集,之后选一种学习算法,学习出一个hypothesis, 就是那个h, 个人觉得这个用模型来表示更好,只不过在机器学习最开始的时候用假说这个词, 后面就一直这么叫了。当我们算出hypothesis 之后,输入一个x预测这个x对应的y值(不是真实的y值)。
我们假设这个假说是线性的, θ表示参数
我们要做的是找到合适的θ, 让hθ(x) 距离真实的y值更接近
2.1 cost function
我们来简化一下cost function,来让我们更好的理解这个式子。
假如我们让hypothesis 函数中的参数中的θ0等于0的话, hθ(x)就由hθ(x)=θ0+θ1*x变成了hθ(x)=θ1*x
在几何中的意义呢就是直线过原点
比较一下hθ(x)和J(θ)
hθ(x) | J(θ1) |
自变量是x,θ1是固定的说明这个函数是针对x来说 | 自变量是θ1,说明这个函数是针对θ1来说的 |
![]() | ![]() |
假如我们的数据为(1, 1)、(2, 2)、(3, 3),如果我们的θ1取1的话 直线方程如上图所示,斜率为1的过原点的直线 | 当θ1取1的时候,我们来算一下J(θ1),结果是0所以在这个坐标系 中一个点是(1, 0) |
![]() | ![]() |
如果θ1等于0.5呢,我们将会得到一个新的图像,斜率是0.5过原点 的直线 | 继续算θ1等于0.5时候的J(θ1) ≈ 0.58, 所以第二个点是(0.5, 0.58) |
![]() | ![]() |
再看一个,如果θ1等于0的话,图像是x轴 | 继续算θ1等于0时候的J(θ1) ≈ 0.23, 所以第二个点是(0,0.23), 依次类推 如果我们继续算θ1等于不同值时候的J(θ1),我们能得到如下图所示的图像 |
![]() | ![]() |
我们要求的是θ1取什么值的时候J(θ1)能到最小,从图像上可以看到,当θ1 等于1的时候J(θ1)有最小值,对应到左图也就是那条蓝线,确实是模型与 真是数据最符合的时候,所以我们要求醉符合数据的模型就可以转换成求 J(θ1)的最小值 |
以上对hθ(x)和J(θ1)有了一个对比,相信大家对这两个方程有了更直观的认识,不过以上说的都是只有一个参数θ1的情况, 我们之后要把两个参数都加上:
hθ(x) | J(θ0, θ1) |
自变量是x,θ0, θ1是固定的, 说明这个函数是针对x来说 | 自变量是θ0, θ1,说明这个函数是针对θ0, θ1来说的 |
![]() | ![]() |
当θ0=50, θ1=0.06的时候,画出的线如图所示 | 当我们转到J(θ0, θ1)的时候,因为自变量变成了θ0和θ1, 我们只能用一 个三维图表示,为了之后表达方便,我们将三维图变成二维图,于是我们用‘等高线’表示,如下图所示: |
![]() | ![]() |
θ0, θ1分别是800和-0.15的时候,画的线,过点(0, 800), 斜率是-0.15 我们可以看到,这条线与点的符合并不是很好。 | 这张图就是等高线的图,在同一条线上的点J(θ0, θ1)的值是相同的,所以 如果我们在图上选中一点, 他的坐标为(800, -0.15),在左图看效果不 好,在右图看该点距离椭圆的中心点距离也很远。 |
![]() | ![]() |
当θ0, θ1分别是350和0的时候,画的线,过点(0, 350), 斜率是0, 直线与数据的符合程度比上一个图好一些。 | 换一个新的点(350, 0), 该点距离椭圆的中心点距离少了一些,相对应 左图,直线与数据的符合程度好一些。 |
![]() | ![]() |
当θ0, θ1分别是200和0.12的时候,画的线,过点(0, 200), 斜率是 0.12,直线与数据符合程度最好。 | 当点取(200, 0.12)的时候,最接近椭圆的中心点,所以我们要做的就是找 到椭圆的中心点。 |
实际上我们要求的就是J(θ0, θ1)图像的最低点,也就是椭圆的中心点,但是我们不能遇到一个问题就画图,手动的去找,而且现在只有θ0, θ1两个参数,以后参数一多起来根本无法做图做出来,所以我们要利用计算机,利用算法将这个椭圆的中心点算出来,这就引出来下一个话题,梯度下降。
2.2梯度下降(Gradient Descent)
步骤是:
- 初始化θ0, θ1的值,假设θ0 = 0, θ1 = 0
- 不断的改变θ0, θ1的值为了减小J(θ0, θ1)的值,直到达到我们所期望的,最小值
如这张图所示,假设我们初始位置选在了1点,我们可以把找最低点想象成一个下山的过程,当我们在1点时要怎样做才能快速的下到山底呢?做法就是在1点四周环视,寻找一个方向向下,坡度最陡的方向,往前走一步,之后再做同样的事情直到局部最低点。
假如我们初始化时选的是另一个新的点,即使按照刚才的步骤,我们也很有可能走到一个完全不同的局部最低点,如何解决这个问题我们之后讨论。
我们来看看公式 :
有几点要注意一下:
- := 在这里是赋值的意思,将后边的结果给到前边
- α 表示learning rate,学习速度,如果α 很大,J(θ0, θ1)的值会变化的很剧烈,如果α 很小,J(θ0, θ1)的值会变化的很缓慢。
- 在这个式子中的θ0, θ1是同时计算的。什么意思呢?
第三点什么意思呢?
![]() | ![]() |
我们来看这两个运算步骤,左边的是先把θ0, θ1算完之后再赋值过去,右边的是算一个,更新一下,再用更新过的θ0来算θ1,这样就会产生错误,因为式子中的参数发生了变化。
我们重点关注公式中的求导项:
为了让大家理解的更简单,我们先用一个参数的 J(θ1)函数。
说明完导数项之后,我们来说一下α
至于说为什么θ1能变化到最低点,是因为:
2.3利用梯度下降计算线性回归的cost function
下图是公式计算过程:
之前我们提到过,由于我们选择的初始点的位置的不同, 在经过梯度下降计算后有可能走到不同的局部最低点。在线性回归问题中,暂时是不会涉及到的,因为线性回归的cost function 是凸函数(convex function)意思就是,只有一个局部最低点,也就是全局最低点。
2.4结果展示
2.5思维导图
最后附上一张思维导图,帮助记忆。
ps:以上内容对应着Ng老师的lesson 2.1-2.7, 有兴趣的同学可以看一下视频。
视频地址:https://www.youtube.com/watch?v=GtSf2T6Co80&list=PLLssT5z_DsK-h9vYZkQkYNWcItqhlRJLN&index=10
第一次写技术博客,希望大家不吝赐教,共同探讨,共同进步。