关于机器学习:机器学习吴恩达笔记2

34次阅读

共计 2188 个字符,预计需要花费 6 分钟才能阅读完成。

线性回归算法概述

  • 这篇文章,咱们讲一下第一个机器学习算法————线性回归算法。
  • 为了引入算法,首先,咱们要看一下相干的概念:

咱们依然以预测房价为例,给出的数据集称为训练集,咱们的工作就是从训练集中学习法则,进而预测更多的屋宇价格。

咱们定义了以下符号:
(1)m:训练集的数据数目
(2)x:输出的特色
(3)y:输入的标签,即咱们要预测的后果
(4)(x,y)示意一个训练样本,上标 i 示意第 i 个训练样本(不是示意求幂,而是示意训练集的第 i 行)

  • 接着,咱们要理解下机器学习的工作流程:


(1)把训练集喂给学习算法
(2)学习算法开始工作,输入函数 h(hypothesis 假如函数),一个从 x 到 y 的函数映射
(3)输出 x 特色,输入 y 预测标签

  • 线性回归,即输入的假如函数 h 是一次函数,用一条直线拟合训练集上的点

代价函数:失去最优假如函数

  • 代价函数,就是如何抉择一次函数的两个模型参数,使得假如函数尽量与数据点相拟合。换言之,就是解决一个最小化问题,使得假如函数 h 的预测值和理论值的差距尽可能的小(预测房价中,就是让预测价格和理论价格的差距尽可能的小)。

因为咱们无奈失去所有的理论值,所以咱们只计算训练集提供的理论值;而因为训练集的数据数量 m 往往不同,所以咱们须要 /2m 求平均误差

在这里,咱们应用平方误差函数作为代价函数。平方误差函数是代价函数的一种,对于机器学习的大多数问题尤其是回归问题,平方误差函数是咱们最罕用的抉择

代价函数的直观感触

下边咱们通过一些例子,来获取代价函数的直观感触

  • 首先,咱们先用简化的函数来了解。令截距为 0,函数就变成只有斜率一个参数的函数。咱们绘出代价函数随斜率变动的图像,可见,当斜率取某个值时,代价函数获得全局最小值,这时斜率的取值就是最优假如函数 h 的参数

  • 接着,咱们看一下两个参数的代价函数

为了形容不便,咱们不应用三维曲面图,而用轮廓图(每个圆示意代价函数 j 的值雷同的所有点,相似地形图)

梯度降落法:主动找出代价函数最小化时的参数

  • 介绍了代价函数之后,咱们须要有一种算法,可能主动找出代价函数最小化时的参数来。所以咱们引入了梯度降落法,主动将代价函数最小化
  • 下边,咱们看一下两个参数的梯度降落法流程:

(1)首先赋予两个参数初始值。这个初始值赋啥不重要,依照习惯,咱们个别都初始化为 0
(2)而后一直一点点的扭转两个参数,使得代价函数 j 变小,直到找到一个部分最小值

  • 这个流程能够用下山来了解:

把图设想成山,咱们站在山的一个点上,旋转 360 度环顾四周。而后问本人:如果我要迈着小碎步尽快下山,那么第一步要迈向哪个方向。

迈完一步后,站在新的点上,反复上述步骤,直到走到一个部分最低点

  • 值得注意的是,如果咱们换了一个点应用梯度降落的话,可能会来到另外一个部分最低点。即不同的初始值,找到的部分最低点可能不同
  • 下图是梯度降落法的数学公式,咱们来看一下公式的细节问题:


(1):= 示意赋值。a:=b,不论 a 为何值,都会取 b 的值并且赋予 a;而 a =b,是一个让 a = b 的值的真的申明。a:=a+ 1 是能够滴,然而 a =a+ 1 不行
(2)a 示意学习速率,即咱们下山时迈出多大的步子。a 大,试着用大步子下山;a 小,试着用小碎步下山
(3)是一个微分项,后边再说怎么用
(4)一个很奥妙的问题就是咱们更新两个参数的程序。这里要留神,肯定要同时更新,即先令 j 别离等于 0 和 1,计算得出后果后,同时更新参数 0 和参数 1;而不是先令 j =0,算出后果后更新参数 0,而后令 j =1,带入新的参数 0 失去参数 1,。因为如果是后者用新的参数 0 的话,实际上计算参数 1 带入的点就不是函数上的点了

梯度降落法的直观感触

  • 前边咱们说过,学习速率 a 管制咱们以多大的幅度更新这个参数,下边咱们依然令截距为 0,通过只有一个参数的函数,直观的意识下学习速率和微分项的作用
  • 因为偏导数和导数的区别在于:偏导数有多个参数,而导数只有一个参数。所以当只有一个参数时,实际上相当于 a * 切线斜率。

学习速率 a 是一个负数,若斜率为负,更新后参数变大,代价函数横坐标右移;若斜率为正,更新后参数变小,代价函数横坐标左移。所以,随着参数更新,代价函数在一直靠近最小值

  • 如果学习速率 a 太大或者太小会产生什么呢?


(1)学习速率 a 太小,就像小宝宝的步调,许多步也到不了最低点,影响效率

(2)学习速率 a 太大,当靠近最低点时,可能会间接跨过最低点,在最低点左近左右来回挪动,但就是到不了最低点

  • 如果初始化时就把参数放到了一个最低点,后边会怎么样?最低点斜率等于 0,更新参数值没有变动,梯度降落法啥也没做
  • 这里还有一个细节问题,随着代价函数一直靠近最低点,导数越来越小,这时只管学习速率 a 没有变动,然而更新幅度还是会变小。这有利于咱们收敛到最小值,而不必人为的扭转 a

  • 上边的这种梯度降落算法,称为批量梯度降落算法。即在梯度降落的每一步,都会计算所有的(整个批次的)训练集标签和预测值的差别。

实际上,梯度降落法还有其余的版本,例如每次只计算训练集的一个小子集的差别

线性回归算法的得出

  • 何为线性回归算法:

将梯度降落法利用到线性回归的平方误差代价函数,来最小化平方误差代价函数

  • 得出线性回归算法:

(1)首先带入代价函数,计算出微分项的后果:

(2)将后果带入梯度降落算法,重复执行式子直到收敛,这就是线性回归算法(收敛:函数向某一个值凑近,这里了解为两个参数更新时不再发生变化(不发生变化阐明斜率为 0,达到了部分最低点))

正文完
 0