现在我有一些数据集,就像左图中的叉。
那么我想通过一个一次函数也叫线性回归函数(一条直线)去拟合这些数据,一次函数在没有确定之前,应该是这个样子的:
其中 θ0 和 θ1 都是未知量。现在关键就是如何求 θ0 和 θ1 这两个参数。θ0 和 θ1 可以取任意值,怎么取值才能让这条直线最佳地拟合这些数据呢?这就是代价函数登场的时刻了。
这就是一次函数的代价函数 J(θ0, θ1)。看到这个复杂的函数有没有头很晕的感觉呢?如果晕,没关系,让我们一步步来分析这个函数。判断拟合的这个函数是否准确就是判断通过这个函数的出来的结果与实际结果有多大的误差:
i 为第 i 个数据,上式表示我通过拟合函数 hθ(x) 得到的第 i 个数据与真实的第 i 个数据的误差。总共有 m 个数据,那么我们就应该把 m 个数据的误差求和然后再求出平均误差,得到下面这个式子。
只要我让这个值尽可能的小,我所做的拟合函数就越准确,那么刚才求拟合函数的问题就转化成了通过 θ0 和 θ1 求 J(θ0, θ1) 的最小值。
为了说明代价函数是如何进行工作的,现在我们来简化一下问题,让 θ0=0,这样我们要求的拟合函数就是一条过原点的直线,参数就剩下一个 θ1,θ1 代表直线的斜率。如下图所示,我想要拟合左图中的 3 个点,我就要取不同的参数 θ1 进行尝试,θ1 取值不同,直线的颜色不同。这里 θ1 分别取 0, 0.5, 1,直线的颜色分别为深蓝、紫色和浅蓝色。如何确定哪条直线拟合的最好呢,我们就要把 θ1 的不同取值带入到代价函数 J(θ1) 中(右图)。这里我们就发现,当 θ1=1 时,代价函数值最小为 0,那么我们就找到了拟合函数 hθ(x)= θ1x 的最佳参数 θ1=1。
如果有两个参数 θ0 和 θ1,那么他们的代价函数图像就是这样。
用轮廓图画出来的话就是这样(轮廓图类似于等高线图)
那么现在关键的问题来了,我个人比较懒,不希望每次都要我亲自处理这些数据,从代价函数图中找到最小值所在的点。有没有一种算法可以自动地求出使得代价函数最小的点呢?有,那就是梯度下降。在这里先卖个关子,梯度下降算法我下次再介绍。
ps. 本篇文章是根据吴恩达机器学习课程整理的学习笔记。如果想要一起学习机器学习,可以关注微信公众号「SuperFeng」,期待与你的相遇。