专栏首页mantou大数据[机器学习Lesson 2]代价函数之线性回归算法
原创

[机器学习Lesson 2]代价函数之线性回归算法

本章内容主要是介绍:单变量线性回归算法(Linear regression with one variable)

1. 线性回归算法(linear regression)

1.1 预测房屋价格

下图是俄勒冈州波特兰市的住房价格和面积大小的关系:

数据集包含俄勒冈州波特兰市的住房价格

该问题属于监督学习中的回归问题,让我们来复习一下:

  • 监督学习(Supervised'Learning'):对示例数据给出“正确答案”。
  • 回归问题(Regression 'Problem'):根据之前的数据预测出一个准确的输出值 。

1.2 训练集

image
  • **m**=训练样本数量
  • **x's**=输入变量/特征量
  • **y's**=输出变量/目标变量,预测结果

(x,y)表示一个训练样本。

x(1) 指的是 第一个训练集里值为2104的输入值, 这个就是第一行里的x x(2) 等于1416。这是第二个x y(1) 等于460,这是第一个训练集样本的y值, 这就是(1)所代表的含义。

这就是一个监督学习算法的工作方式,我们可以看到这里有我们的训练集里房屋价格,我们把它喂给我们的学习算法,然后输出一个函数。

按照惯例,通常表示为小写h代表hypothesis(假设) h表示一个函数。输入是房屋尺寸大小,就像你朋友想出售的房屋。因此,h 根据输入的 x 值来得出 y 值。 y值对应房子的价格。所以h是一个从x到y的函数映射 。

  • y关于x的线性函数 :
 hθ(x)=θ0+θ1\*x 
image

这个模型被称为线性回归(linear regression)模型。 这实际上是关于单个变量的线性回归,这个变量就是x 根据x来预测所有的价格函数。同时, 对于这种模型有另外一个名称,称作单变量线性回归 单变量是对一个变量的一种特别的表述方式。总而言之 这就是线性回归。

2. 代价函数(Cost Function)

任何能够衡量模型预测出来的值h(θ)与真实值y之间的差异的函数都可以叫做代价函数C(θ),如果有多个样本,则可以将所有代价函数的取值求均值,记做J(θ)。

J(θ0,θ1)=12m$\sum$i=1m(y^i−yi)2=12m∑i=1m(hθ(xi)−yi)2

image
  • m:训练样本的个数;
  • hθ(x):用参数θ和x预测出来的y值;
  • y:原训练样本中的y值,也就是标准答案
  • 上角标(i):第i个样本

3. 代价函数1(简化版):当θ0=0时

hθ(x)=θ1x,如下图:

重要公式
image
  • Hypothesis: 假设。这个例子中是尺寸对于房价关系的预测。
  • Parameters: 参数。
  • Cost Function:代价函数。
  • Goal: 优化目标。代价最小化。

3.1 斜率为1时的代价函数

image
(1)假设函数

x轴为面积,y轴为房价

假设函数 h(x) 对于一个固定的θ1,这是一个关于x 的函数。 所以这个假设函数就是一个关于 x 这个房子大小的函数。

(2)代价函数

x轴为假设函数的斜率,y即代价大小

代价函数 J 是一个关于参数 θ1 的函数,而 θ1 控制着这条直线的斜率 。

3.2 斜率为0.5时的代价函数

image

斜率为0.5时,取3个样本(m=3):(0.5,1),(1,2),(1.5,3)。套公式得出J(0.5)=0.58

同理,J(0)=1/6(1²+2²+3²)=14/6,求出更多的点之后,我们得出类似以下函数:

image

学习算法的优化目标是我们想找到一个 θ1 的值,来将 J(θ1) 最小化。这是我们线性回归的目标函数。 上面的曲线中,让 J(θ1) 最小化的值是 θ1=1。这个确实就对应着最佳的通过了数据点的拟合直线 。这条直线就是由 θ1=1 的设定而得到的。 对于这个特定的训练样本,我们最后能够完美地拟合 这就是为什么最小化 J(θ1),对应着寻找一个最佳拟合直线的目标。

4. 代价函数2:完整版

包含θ0、θ1两个参数的代价函数呈现出来的是类似下图的三维曲面图,两个轴分别表示θ0、θ1。

image

在ML中,一般使用轮廓图( contour plot 或 contour figure 的意思)描述该模型。

4.1 轮廓图简介

image

右侧图形就是一个轮廓图,两个轴分别表示θ0和θ1。 而这些一圈一圈的椭圆形,每一个圈就表示J(θ0,θ1) 相同的所有点的集合。

如图选取三个点,这三个点都表示相同的 J(θ0,θ1) 的值。横纵坐标分别是θ0, θ1 这三个点的 J(θ0,θ1) 值是相同的。我们需要算的代价函数即为圆心的点,此时我们的代价最小。

4.2 第一组数据

我们选取一组数据,θ0=800θ1=-0.15,此时我们可以对应得到一个左边这样一条线。

image

以这组 θ0,θ1 为参数的这个假设 h(x) 并不是数据的较好拟合。并且你也发现了这个代价值 距离最小值点还很远。也就是说这个代价值还是算比较大的,因此不能很好拟合数据。

4.3 第二组数据

选取第二组数据

θ0=360θ1=0。我们可以得到h(x)=360+0\*x这样一条直线。同样不能很好的拟合数据。

4.4 第三组数据

最后一个例子:

image

这个点其实不是最小值,但已经非常靠近最小值点了。 这个点对数据的拟合就很不错,它对应这样两个θ0 和 θ1 的值。同时也对应这样一个 h(x) 这个点虽然不在最小值点,但非常接近了。 因此误差平方和,或者说 训练样本和假设的距离的平方和,这个距离值的平方和 非常接近于最小值,尽管它还不是最小值。

5. 小结

通过这些图形,本篇文章主要是帮助理解这些代价函数 J 所表达的值;它们是什么样的它们对应的假设是什么样的;以及什么样的假设对应的点更接近于代价函数J的最小值。

我们真正需要的是一种有效的算法,能够自动地找出这些使代价函数J取最小值的参数θ0和θ1来。我们也不希望编个程序 把这些点画出来,然后人工的方法来读出这些点的数值,这很明显不是一个好办法。

事实上在深入机器学习的过程中, 我们会遇到更复杂、更高维度、更多参数的情况。而这些情况是很难画出图的,因此更无法将其可视化,因此我们真正需要的,是编写程序来找出这些最小化代价函数的θ0和θ1的值。在后续文章中将介绍一种算法 能够自动地找出能使代价函数 J最小化的参数θ0和θ1的值。


本文资料部分来源于吴恩达 (Andrew Ng) 博士的斯坦福大学机器学习公开课视频教程。

1网易云课堂机器学习课程:

http://open.163.com/special/opencourse/machinelearning.html

2coursera课程:

https://www.coursera.org/learn/machine-learning/

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [机器学习Lesson4]多元线性回归

    在回归分析中,如果有两个或两个以上的自变量,就称为多元回归。事实上,一种现象常常是与多个因素相联系的,由多个自变量的最优组合共同来预测或估计因变量,比只用一个自...

    mantou
  • Kafka基础入门

    1. Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统...

    mantou
  • [机器学习Lesson3] 梯度下降算法

    梯度下降算法是很常用的算法,可以将代价函数J最小化。它不仅被用在线性回归上,也被广泛应用于机器学习领域中的众多领域。

    mantou
  • 代价函数

    代价函数,度量【假设集】的准确性。 机器学习中常用的代价函数,总结如下: 1 误差平方和函数 ? 说明:yi 是模型预测值,oi是样本实际值 2 交叉熵函数...

    陆勤_数据人网
  • Python入门高阶教程-高阶函数

    前面写的 Python 入门教程中只有基础入门和基础进阶两部分,可以在公众号下拉菜单中找到,小一我都已经分好类了。

    知秋小一
  • 按部就班的吴恩达机器学习网课用于讨论(11)

    知道了核函数的表示形式(使用例如高斯核函数作为工具,计算样本x和地标l之间的距离作为特征f,其中f为核函数),之后就是讨论核函数地标的选择。

    嘘、小点声
  • python套路-函数式编程之匿名函数与偏函数

    当调用函数时, 有时不需要显示定义好一个函数, 直接传入一个匿名函数更为方便。python可使用lambda表达式创建匿名函数。

    efonfighting
  • 【Python环境】Python函数式编程指南(2):函数

    2. 从函数开始 2.1. 定义一个函数 如下定义了一个求和函数: def add(x, y): return x + y 关于参数和返回值的语法细节可以参考...

    陆勤_数据人网
  • python函数

    今天我们来学习一下python函数。 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。Python内置了很多有用的函数,我们可以直接调用.

    老雷PHP全栈开发
  • Python那些事——Python之函数式编程!

    函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券