(二)一元线性回归

文章目录

  • (二)一元线性回归
    • 一元线性回归(Univariate Linear Regression)
      • 模型形式和基本假设
      • 损失函数(Cost Function)
      • 梯度下降(Gradient Descent)
    • 小结
    • 参考资料

本篇将介绍一类经典的有监督学习算法——线性回归(Linear Regression)。

回顾:有监督学习从有标记的训练数据中推导出预测函数,即给定数据集 (x,y)(x,y)(x,y),能够基于 xxx 预测 yyy。

回归这个词的意思是,我们在试着推测出一系列连续值属性。回归分析是一种预测性的建模技术,这种技术通常用于预测分析、时间序列模型以及发现变量之间的因果关系,通常使用直线或曲线来拟合数据点。

假设您是一家餐饮连锁店的 CEO,并且正在考虑在城市A(人口12万)或城市B中(人口15万)选择一个开设新的门店,需要事先预估一下在不同城市开设分店的预期利润额。您已经搜集到了97个城市的人口数据和门店利润数据1。如何依据这组数据决定在哪个城市开设分店呢?

观测值 # 人口(XXX) 利润(YYY)
1 61,101 $ 17,592
2 55,278 $ 91,302
3 85,186 $ 13,662
4 70,032 $ 11,854
97 54,901 $ 42,630

以上97组观测值表示在图中即为下图1左散点图,其中,横轴为城市人口数,纵轴为门店利润额。最直观的想法是,找到一条直线或曲线(下称,拟合线)来拟合图中数据点,目标是使拟合线到数据点的距离差异最小。由此,对于给定城市人口数,即可对应到拟合线上一点,进而估计出大致的利润额。

线性回归假设目标值与特征之间线性相关,即可以通过一条直线来拟合目标值(即,门店利润额)和特征值(即,城市人口数)之间的关系,即如下图右所示。

图1 线性回归问题示例

一元线性回归(Univariate Linear Regression)

在上面的例子中,我们仅使用一个特征值(即,城市人口数)来预测门店利润额,因此,这属于一元线性回归问题。

模型形式和基本假设

上图1中的蓝色直线即为我们建立的模型,其建立了输入 xxx 与输出 yyy 之间的函数关系。模型有时也被称之为假设(hypothesis),用 h(x)h(x)h(x) 表示。

图2 一元线性回归

h(x)h(x)h(x) 的函数表达形式如下:
hθ(x)=θ0+θ1⋅xh_\theta(x) = \theta_0 + \theta_1 \cdot x hθ​(x)=θ0​+θ1​⋅x
其中,

xxx 代表输入变量(特征)

θ0\theta_0θ0​ 代表偏置参数,即直线与 YYY 轴交点的纵坐标(即,当 x=0x = 0x=0 时,hθ(x)h_\theta(x)hθ​(x) 的取值)

θ1\theta_1θ1​ 代表权重参数,即直线的斜率(如上图2中表达式所示)

hhh 代表学习算法的解决方案或函数

yyy 代表目标值

此例中,存在 θ0\theta_0θ0​ 和 θ1\theta_1θ1​ 两个参数(Parameters),其取值不同对应于一条不同的直线,是我们算法需要学习出的参数。

损失函数(Cost Function)

我们选择的参数决定了我们得到的直线相对于我们的训练集的准确程度。当存在多条拟合直线时(即如下图3所示),我们该如何选出最佳的那条?

图3 一元线性回归的假设

求解最佳参数,需要一个标准来对结果进行衡量,为此我们需要定量化一个目标函数式,使得计算机可以在求解过程中不断地优化。针对任何模型求解问题,都是最终可以得到一组预测值 y^\hat yy^​ ,对比已有的真实值 yyy 。我们的目标便是不断调整 θ0\theta_0θ0​ 和 θ1\theta_1θ1​ 的取值,最终使得 y^\hat yy^​ 与 yyy 之间误差最小。 由此,便引出了损失函数(Cost Function)的概念。

对于回归问题,其损失函数的表达式如下所示:
J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2J(\theta_0, \theta_1) = \frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 J(θ0​,θ1​)=2m1​i=1∑m​(hθ​(x(i))−y(i))2
其中,

mmm 代表样本数量,在上面的利润预测的例子中,m=97m = 97m=97

{x(i),y(i)}\{x^{(i)}, y^{(i)}\}{x(i),y(i)} 代表训练集中的第 iii 个实例

J(θ0,θ1)J(\theta_0, \theta_1)J(θ0​,θ1​) 表示损失函数,当训练数据给定的情况下,损失函数 JJJ 是关于参数 θ0\theta_0θ0​,θ1\theta_1θ1​ 的函数

总结一下,一元线性回归的基本形为:

Hypothesis:hθ(x)=θ0+θ1⋅xParameters:θ0,θ1CostFunction:J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2Goal:min⁡θ0,θ1J(θ0,θ1)\begin{aligned} & Hypothesis: h_\theta(x) = \theta_0 + \theta_1 \cdot x \\ & Parameters: \theta_0, \theta_1 \\ & Cost Function: J(\theta_0, \theta_1) = \frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 \\ & Goal: \min_{\theta_0, \theta_1} J(\theta_0, \theta_1) \end{aligned} ​Hypothesis:hθ​(x)=θ0​+θ1​⋅xParameters:θ0​,θ1​CostFunction:J(θ0​,θ1​)=2m1​i=1∑m​(hθ​(x(i))−y(i))2Goal:θ0​,θ1​min​J(θ0​,θ1​)​

在上面的利润预测的例子中,先来直观的感受一下 J(θ0,θ1)J(\theta_0, \theta_1)J(θ0​,θ1​) 是什么样的。下图4中,左侧为 J(θ0,θ1)J(\theta_0, \theta_1)J(θ0​,θ1​) 的 3D图,其中 XXX 轴为 θ0\theta_0θ0​, YYY 轴为 θ1\theta_1θ1​, ZZZ 轴为 J(θ0,θ1)J(\theta_0, \theta_1)J(θ0​,θ1​)(即,曲面的高度);右侧为 J(θ0,θ1)J(\theta_0, \theta_1)J(θ0​,θ1​) 的二维等高线图,每条轮廓线上的参数组合得到的损失函数值相等。

图4 损失函数可视化

梯度下降(Gradient Descent)

有了这样的损失函数,如何让计算机可以自动、有效地找到损失函数的最小值呢?

梯度下降算法就是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出损失函数 J(θ0,θ1)J(\theta_0, \theta_1)J(θ0​,θ1​) 的最小值。

想象一下你正站立在一个山坳里,发现山谷里有一堆金子,你需要以最快的速度到达山谷……在梯度下降算法中,我们要做的就是看看我们的周围,并问自己要在某个方向上,用小碎步尽快下山。这些小碎步需要朝什么方向?你看一下周围,你会发现最快的下山方向,走几步然后你再看看周围,再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,并依此类推,直到你接近局部最低点的位置。这就是梯度下降算法的基本思想。

最快的下山方向”在数学语言中对应于“损失函数的负梯度方向”(即,函数值下降最快的方向)。一般来说,函数的梯度定义为函数的全部偏导数构成的向量。所谓偏导数,简单来说是对于一个多元函数,选定一个自变量并让其他自变量保持不变,只考察选定自变量变化导致的因变量变化(关于如何求解偏导数,可以参考多变量微积分笔记1——偏导数2),梯度记为 ∇J(θ0,θ1)\nabla J(\theta_0, \theta_1)∇J(θ0​,θ1​) ,即:

∇J(θ0,θ1)=[∂J∂θ0(θ0,θ1)∂J∂θ1(θ0,θ1)]\nabla J(\theta_0, \theta_1) = \begin{bmatrix} \frac{\partial J}{\partial \theta_0} (\theta_0, \theta_1)\\ \frac{\partial J}{\partial \theta_1} (\theta_0, \theta_1) \end{bmatrix} ∇J(θ0​,θ1​)=[∂θ0​∂J​(θ0​,θ1​)∂θ1​∂J​(θ0​,θ1​)​]

对于线性回归中损失函数的表达式,上式可以进一步表示为(这里使用了基本导数公式,若需深入了解,可参见微积分数学公式3):
∇J(θ0,θ1)=[1m∑i=1m(hθ(x(i))−y(i))1m∑i=1m(hθ(x(i))−y(i))⋅x(i)]\nabla J(\theta_0, \theta_1) = \begin{bmatrix} \frac{1}{m} \sum_{i=1}^m (h_\theta (x^{(i)}) - y^{(i)})\\ \frac{1}{m} \sum_{i=1}^m (h_\theta (x^{(i)}) - y^{(i)}) \cdot x^{(i)} \end{bmatrix} ∇J(θ0​,θ1​)=[m1​∑i=1m​(hθ​(x(i))−y(i))m1​∑i=1m​(hθ​(x(i))−y(i))⋅x(i)​]

一元线性回归问题的梯度下降算法采用以下步骤

  1. 初始化一组参数值 (θ0,θ1)(\theta_0, \theta_1)(θ0​,θ1​),并设置迭代次数 TTT;

  2. 对于每次迭代,同时更新参数 θ0\theta_0θ0​ 和 θ1\theta_1θ1​:
    {θ0:=θ0−α1m∑i=1m(hθ(x(i))−y(i))θ1:=θ1−α1m∑i=1m(hθ(x(i))−y(i))⋅x(i)}\left \{ \begin{aligned} & \theta_0 := \theta_0 - \alpha \frac{1}{m} \sum_{i=1}^m (h_\theta (x^{(i)}) - y^{(i)})\\ & \theta_1 := \theta_1 - \alpha \frac{1}{m} \sum_{i=1}^m (h_\theta (x^{(i)}) - y^{(i)}) \cdot x^{(i)} \end{aligned} \right \} ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​​θ0​:=θ0​−αm1​i=1∑m​(hθ​(x(i))−y(i))θ1​:=θ1​−αm1​i=1∑m​(hθ​(x(i))−y(i))⋅x(i)​⎭⎪⎪⎪⎪⎬⎪⎪⎪⎪⎫​

注:

上式中 :=:=:= 为赋值符号,即用其右侧的值更新其左侧的值

上式中 α\alphaα 为学习率,类似于我们下山时小碎步的步长

学习率 α\alphaα 的选择对于梯度下降算法的有效收敛至关重要

  • 如果 α\alphaα 设置过小,虽然每次迭代 J(θ)J(\theta)J(θ) 均会降低,但算法收敛(即算法寻到最优参数值)的速度比较慢

  • 如果 α\alphaα 设置过大,无法保证每次迭代 J(θ)J(\theta)J(θ) 均会降低,类似于步子迈的过大,跨过了最低点

  • 在实践中,吴恩达给出的建议是,可以采用以下序列尝试寻找 α\alphaα 的最优值:α=\alpha =α=…, 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1, …

需特别说明的是,在上面介绍的方法中,在每次迭代中,算法是基于所有训练样本的信息来调整参数,这种方法也被称之为批量梯度下降法(Batch Gradient Descent)

下图显示了梯度下降算法的学习过程,图中选择了迭代次数为 1,5, 10, 100, 200, 400, 600, 800, 1000, 1500 共十个点。初始参数组合为 (θ0,θ1)=(10,10)(\theta_0, \theta_1) = (10,10)(θ0​,θ1​)=(10,10), 最终寻得的最优参数组合为 (θ0,θ1)=(−3.04,1.11)(\theta_0, \theta_1) = (-3.04,1.11)(θ0​,θ1​)=(−3.04,1.11), 对应的模型为(即为此篇开始时图1中出现的蓝色直线):
h(x)=−3.04+1.1xh(x) = -3.04 + 1.1 x h(x)=−3.04+1.1x

图5 梯度下降算法收敛过程

小结

  • 此篇我们介绍了有监督学习中的一类经典的回归算法,一元线性回归。当只有一个自变量 xxx 影响结果 yyy 时,预测分析二者之间存在线性关系(即变量之间的关系可以通过直线拟合)的方法就是一元线性回归。

  • 我们定义了损失函数来定量化模型对数据的拟合效果。 损失函数可用于评价模型的预测值和真实值不一样的程度。当损失函数最小时,预测的结果与真实值最接近,于是我们得到了最佳的拟合直线。

  • 梯度下降法是机器学习中一种常用到的算法,但其本身不是机器学习算法,而是一种求解的最优化算法。主要解决求损失函数最小值问题,其基本思想在于,不断地逼近最优点,每一步的优化方向就是梯度方向(即局部函数下降最快的方向)。

参考资料


  1. 数据来自吴恩达机器学习网络课程。 ↩︎

  2. 多变量微积分笔记1——偏导数 ↩︎

  3. 微积分数学公式 ↩︎

机器学习初探:(二)线性回归之一元线性回归相关推荐

  1. 传统机器学习模型解说01:一元线性回归模型

    引入 年薪和工作年限有关吗? 可见两个变量之间存在明显的线性关系,而根据常识,工作年限是因,年薪是果. 那么,是否存在某个模型,如图中的一次函数直线,来描述两个变量之间的关系呢? 原理简述与背景介绍 ...

  2. java 一元线性回归_一元线性回归的java实现

    我们有两组数据,比如连续5年的pv与uv. 我们想预测一下,uv达到500k那么pv会是多少.当然更有意思可能是,如果销售额是500w的话,pv会是多少. 机器学习里的一元线性回归方法是比较简单的方法 ...

  3. python装饰器带参数函数二阶导数公式_机器学习【二】单变量线性回归

    吴恩达机器学习笔记整理--单变量线性回归 通过模型分析,拟合什么类型的曲线. 一.基本概念 1.训练集 由训练样例(training example)组成的集合就是训练集(training set), ...

  4. 吴恩达机器学习总结二:单变量线性回归

    第二章 单变量线性回归 3.代价函数:(是参数的方程,最常用平方误差代价函数) 定义:也叫损失函数,用来进行参数估计.当用一个确定的方程来拟合一些数据集时,为了保证方程最为合适拟合程度最好,即每一个点 ...

  5. 机器学习(二)多元线性回归算法预测房价

    机器学习(二)多元线性回归算法预测房价 本篇文章已作为重庆交通大学19级微课<机器视觉>大作业提交,提前声明,避免抄袭误会 "garbage in garbage out&quo ...

  6. 机器学习——回归——一元线性回归

    目录 理论部分 1.1 回归问题 1.2 回归问题分类 1.3 线性回归 1.4 一元线性回归 1.4.1 基本形式 1.4.2 损失函数 1.4.3 训练集与测试集 1.4.4 学习目标 1.4.5 ...

  7. 机器学习——一元线性回归和多元线性回归

    一元线性回归:梯度下降法 一元线性回归是线性回归的最简单的一种,即只有一个特征变量.首先是梯度下降法,这是比较经典的求法.一元线性回归通俗易懂地说,就是一元一次方程.只不过这里的斜率和截距要通过最小二 ...

  8. 一元线性回归模型及其Python案例

    回归的概念:(其实就是用曲线拟合的方式探索数据规律) 回归问题的分类: 一元线性回归: 线性回归模型是利用线性拟合的方式探寻数据背后的规律.如下图所示,先通过搭建线性回归模型寻找这些散点(也称样本点) ...

  9. 线性回归(一元、多元)

    目录 一元线性回归 多元线性回归 一元线性回归 在一元线性回归中,输入只有一个特征.现有输入特征为 x,需要预测的目标特征为y ,一元线性回归模型为 y=w1x+w0y=w_1x+w_0y=w1​x+ ...

最新文章

  1. EF 5.0 帮助类 增删改查
  2. 洛谷 P2679 子串 【dp神题】【滚动数组】【2015 noip d2t2】
  3. 从零开始学习docker(十一)介绍Docker Compose yml文件介绍
  4. SpringMVC的工作流程
  5. Win7玩CF,不能全屏的解决方法...
  6. 那些喜欢少妇的男生......
  7. Python的切片操作
  8. 游戏思考11:游戏服务器类型简单分类(有服务器的会讲的详细一点)
  9. c 实现走迷宫流程图_C语言走迷宫游戏流程图和代码框架
  10. c语言编译kbhit出现问题,在VC++中运行出现error C2065: 'kbhit' : undeclared identifier,什么意思?怎么调试?...
  11. MogaFX—日元兑美元30多年来首次突破150日元
  12. 在linux后台运行脚本的方法和命令
  13. 软技能-代码之外的生存指南
  14. 王垠:Kotlin 和 Checked Exception
  15. 【工具合集】渗透测试工具库-年度最强合辑
  16. 社群的意义?如何寻找合适自己的社群?(知识星球)
  17. 华为mteo30用鸿蒙吗,华为mate50渲染图来了!真全面屏+高通芯+鸿蒙,这颜值确实不一般...
  18. vue项目手机真机预览和调试
  19. 2020莱斯大学计算机全球排名,2019-2020莱斯大学世界排名多少【QS最新第85名】
  20. 《动手学深度学习》(六) -- 图像增广与微调

热门文章

  1. 【翻译】Sibyl: Host Load Prediction with an Efficient Deep Learning Model in Cloud ComputingSibyl:高效的深度学
  2. 3D激光扫描三维重建——5.(matlab)系统框架
  3. [GBase 8s 教程]GBase 8s 创建表格
  4. IDEA解决开启项目超卡问题
  5. 物联网毕业设计 单片机空气质量检测仪
  6. k阶矩、原点矩、中心距
  7. 揭开斐讯免费路由器通过京东热销的幕后真相
  8. 如何使用掘金编辑器写专栏
  9. 2021年高处作业登高架设证考试题库及登高架设试题解析
  10. 文件上传(upload)