大家好,又见面了,我是你们的朋友全栈君。
3.1 代价函数(cost function)
代价函数有助于将最可能的线性函数与我们的数据相拟合。在线性回归中,我们有一个这样的数据集,m表示训练集样本数,而我们的假设函数,也就是我们用来进行预测的函数,是图中所示的线性函数形式。
接下来,我们引入一些术语,Ɵ0和Ɵ1,这些Ɵi我们将它称作为模型参数,我们要做的就是如何去选择这两个参数。对于不同的Ɵ0和Ɵ1,我们会得到不同的假设函数,如下图所示。
在线性回归中,我们有一个训练集,可能如下图所示。我们要做的是得出Ɵ0和Ɵ1,使我们得到的假设函数表示的直线尽量的与这些数据点相拟合。我们怎么选择Ɵ0和Ɵ1呢?我们的想法是我们要选择能够使h(x),也就是输入x是我们的预测的值,最接近该样本对应的y值的参数Ɵ0和Ɵ1。在房子价格预测的例子中,x表示要买出的房子的尺寸大小,y表示卖出的房子的实际价格,我们要尽量选择参数,使得在给出的训练集中,给出的x的值,能够很好的预测y的值。
让我们给出更加标准的定义,在线性回归问题中,我们要解决的是一个最小化的问题,写出关于Ɵ0和Ɵ1的最小化式子,想要h(x)和y之间的差异要小,所要做的事情就是尽量减少预测输出的价格与房子的实际价格的平方最小。接下来进行更加详细的阐述。别忘了,我们使用(x(i),y(i))代表第i个样本,我所要做的就是对所有的样本,预测输出的结果与实际价格差的平方进行一个求和,如下图所示。我们要尽量减小预测值和实际值的这个平方误差和。1/m表示尝试是平均误差最小,1/2m,通常是这个数的一半。
简单的说,我们将这个问题变为找到能使我的训练集中的预测值与实际值的差的平方和的1/2m最小的Ɵ0和Ɵ1的值。因此,这将是我的线性回归的整体的目标函数(这就是代价函数),为了使它更加的清楚,我们需要改写这个函数。按照惯例,我们定义一个代价函数J,如下图所示,我们要做的是对Ɵ0和Ɵ1求J的最小值,J就是代价函数。
代价函数也被称为平方误差函数(Squared error function),有时也被称为平方均方误差(Mean squared error)。为什么我们要求出误差的平方和,是因为误差平方代价函数,对于大多数问题,特别是线性回归问题都是一个合理的选择,其他代价函数也能很好的发挥作用,但是平方误差函数可能是解决线性回归问题最常用的手段了。在后面将更加详细的介绍J的工作原理以及尝试更加直观的解释它在计算什么,以及我们使用它的目的。
总结,我们可以使用代价函数来衡量我们得到的假设函数的准确度。
3.1.1 代价函数Intuition I
上面我们介绍了代价函数数学上的定义,在这里让我们通过一些例子来获取一些直观的感受,看看代价函数到底是在干什么?
回顾一下,上次我们讲到,我们想找到一条直线来拟合我们的数据。我们用 θ0和θ1 等参数得到了这个假设h,而且通过选择不同的参数,我们会得到不同的直线拟合,然后我们还有一个代价函数(cost function),这就是我们的优化目标(goal)。
为了便于我们理解,我们需要将代价函数简化,如下图右边所示。 也就是我们可以将这个函数看成是 把 θ0 设为0,假设函数变为θ1*x,所以我只有一个参数,唯一的区别是现在 h(x) 等于 θ1*x,只有一个参数 θ1 ,所以我的 优化目标是将 J(θ1) 最小化,用图形来表示就是如果θ0 等于零,也就意味这我们选择的假设函数会经过原点。如下图所示。
试着更好的理解代价函数这个概念,我们需要理解这两个重要的函数,一个是假设函数,一个是代价函数。
假设函数就是一个关于x房子大小的函数,与此不同的数,代价函数是关于θ1的函数,而θ1控制着这条直线的斜率,我们将这些函数画出来,试着更好的理解它们,如下图所示。
先从假设函数开始,我们的数据集包含了三个点(1,1)(2,2),(3,3)。选择θ1=1,我们的假设函数看起来就是下图所示的一条直线,横轴表示的是房子的价格x。我们将θ1定为1,我们想要做的是算出在θ1=1的时候J(θ1)是多少。
所以我们按照这个思路来计算代价函数的大小和之前一样代价函数定义如图中所示, 对这个误差平方项进行求和,简化以后就等 三个0的平方和,当然还0。 现在在代价函数里,我们发现所有这些值都等于0 因为对于我所选定的这三个训练样本 ( 1 ,1 ) (2,2) 和 (3,3) ,如果 θ1 等于 1 那么 h(x(i)) 就会正好等于 y(i),所以 h(x) – y 所有的这些值都会等于零,这也就是为什么 J(1) 等于零。
在下图的右边是对应的代价函数,要注意的是我们的代价函数是关于θ1的函数,当我们描述代价函数的时候,横轴表示的是θ1,J(1)等于0,我们有了一个点,我们来看其他一些样本,θ1可以被设定为某个范围内的各种取值,可以使负数等,如果θ1=0.5会发生什么?
如下图所示,我们发现代价函数后面的求和,就是蓝色线段的高度的平方求和,我们可以计算出J(0.5)=0.58,如下图中所示,将这个点在右边图中画出来,
这样一步步的得到更多的点,我们就可以一步步的画出代价函数对应的曲线。如下图右边所示。
我们回顾一下,对于不同的θ1的取值,对应着不同的假设函数,或者说对应于左边一条不同的拟合直线,对于任意的θ1,你可以计算出不同的J(θ1),我们可以利用这些画出右边的这条曲线。现在,你还记得学习算法的优化目标是我们想找一个θ1,使得J(θ1)最小,看图中J(θ1)的曲线可以知道,使J(θ1)最小的θ1的值是1,从图中的左边可以看出,θ1=1确实对应着最佳的数据拟合直线,我们最后能够完美的拟合,这就是为什么最小化J(θ1),对应着寻找一个最佳拟合直线的目标。
这里我们使用图形帮助我们理解代价函数,为了便于理解,我们将θ0设定为0,下面我们将回到原来的问题,即不将θ0设定为0,画出存在θ1和θ0的代价函数的图形,希望能够帮助我们更好的理解代价函数。
3.1.2 代价函数Intuition II
这一小节,我们将更加深入的学习代价函数的作用,和之前一样,下图所示的是几个重要的公式,包含了假设h、参数θ、代价函数、以及优化目标goal。与上一节不同的是我们将假设函数写为关于θ0和θ1的函数。
首先我们同样来理解假设函数和代价函数,存在两个参数的时候,可能会得到如下所示的一个三维曲面图,下面的两个轴分别表示θ0和θ1,纵轴表示J(θ0,θ1),你改变θ0和θ1,会得到不同的代价函数J(θ0,θ1),J(θ0,θ1)对于某个特定的(θ0,θ1),这个曲面的高度,也就是竖直方向的高度,就表示代价函数J(θ0,θ1)的值。
后面不再使用三维曲面图来解释代价函数,将使用轮廓图(contour plot/figure)来进行解释。如下图右边所示就是一个轮廓图。
横轴表示的是θ0,纵轴表示的是θ1,而这些一圈一圈的椭圆形,每一个圈表示J(θ0, θ1)相同的所有点的集合。一系列同心椭圆的中心点就是最小值。其实轮廓图就是等高线图,相当于三维曲面图在一个平面上的投影。
接下来让我们看几个简单的例子,在这里有一个点(蓝色标记的),θ0是800,θ1是大概是-0.15,这个(θ0,θ1)组,对应于左边这样一条假设函数直线,与纵轴相交的地方是800,斜率大概是-0.15,但是这条直线不能很好的拟合所有数据,你也发现了,这个代价值所在的位置离中心点(最小值)也比较远,也就是说这个代价值是比较远的。如下图所示。
后续我们将遇到更高维度、更多参数、更加复杂的情况。我们需要做的是编写程序自动找出θ0和θ1这样的值。下一节将介绍一种能够自动找出θ0和θ1的算法。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/132418.html原文链接:https://javaforall.cn