热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

机器学习从入门到XX(一):线性回归与梯度下降

介绍什么是机器学习?有两种定义。ArthurSamuel如此描述机器学习:一个领域的研究,旨在研究,在不进行编程的情况下,让计算机具有学习能力。TomMitchell给出了一个更为
介绍

什么是机器学习?

有两种定义。Arthur Samuel如此描述机器学习:一个领域的研究,旨在研究,在不进行编程的情况下,让计算机具有学习能力。

Tom Mitchell给出了一个更为现代的定义:一个计算机程序从经验E以及评判标准P中学习如何完成任务T,随着E的累积,P得到提升。

例如,下棋游戏中:

  • E:在很多盘棋局中的经验
  • T:下棋任务
  • P:程序赢得下一盘棋的可能性

总体来说,任何机器学习问题可以分为监督学习(supervised learning)无监督学习(unsupervised learning)

监督学习

在监督学习中,给定一个数据集,并且我们已经知道输出看起来是什么样子的,知道数据和输出之间是存在联系的。

监督学习可分为“回归(regression)”“分类(classification)”两种类型的问题。在回归问题中,我们试图预测连续的结果,换句话说,我们试图将输入变量映射到某种连续函数。在分类问题中,却试图预测离散结果,换句话说,我们试图将输入变量映射进离散的类别中。

例子1:

给定一组关于房子大小的数据,预估出价格。从大小推算价格的函数的输出是连续的,所以这是个回归问题。

如果换一种问法:“预估房价与指定价格的大小关系”。这个问题就转化为分类问题了,因为我们试图将房价分为两种离散的类别中(大于或小于)。

例子2:

a) 回归:给定一张男性或女性的照片,推算年龄。
b) 分类:给定一张男性或女性的照片,估计他/她是高中生还是大学生。另一个分类的例子:银行需要根据跟人信用历史,判断是否要给其贷款。

无监督学习

无监督学习是指在几乎对结果一无所知的情况下,趋近结果。在对输入数据的变量缺少必要的认识的情况下,从中获取一些结构。通过将数据中变量的关联,将数据进行聚类,从而获取这些结构。无监督学习对于预测结果是没有反馈的。

例如:

聚类:从1,000,000个不同的基因中,找到某种方式,能够自动将具有某种相似性或关联的基因进行分组,这些变量可能是寿命,位置,功能等。

非聚类:“鸡尾酒算法”,能否从嘈杂环境中识别不同的声音。(例如,在鸡尾酒会上,从混合的声音中区分人声或音乐声)

模型和代价函数

模型表示

这里以监督学习中的房子大小预测房价问题为例。使用$ x^{(i)} $指代输入变量(这里是房屋面积),$ y^{(i)} $指代输出或者我们需要预测的结果(这里是房屋价格)。元组($ x^{(i)}, y^{(i)} $)是训练用例数据集,m个训练用例$ (x^{(i)},y^{(i)});i=1,…,m $称为训练数据集。注意,上标(i),并没有幂运算的功能。我们也会使用X,表征输入数据集,Y表征输出数据集。

稍微正规的解释一下监督学习是什么。监督学习的目标是,给定一个训练数据集,尝试学习一个函数h: X → Y,使得h(x)成为好的预测y的函数。由于历史原因,这个h函数称为假设函数(hypothesis),下图说明了这个流程:

《机器学习从入门到XX(一):线性回归与梯度下降》

如果我们要预测的目标值是一个连续值时,例如房价预测问题,我们称这种机器学习问题为回归(regression)问题;如果y值只在少数的离散值中取值(例如,假设给定面积,预测这是个house还是apartment),我们称为分类(classification)问题

代价函数

我们可以使用代价函数(cost function)来衡量假设函数(hypothesis function)的精准性。代价函数实际上计算的就是每一个经由假设函数计算而来的y,与实际的y的差值的平均值。当这个差值最小时,假设函数最优。

如果hypothesis function如下:

$$ h(x)=θ_0+θ_1x $$

这是一个线性函数,对于房价预测问题,我们的最终目的是通过算法,得到一组最优的$ (θ_0,θ_1) $使得对所有的训练集合X(房屋面积),通过h(x)计算得到的Y(房屋价格)与实际的Y偏差最小,即拟合度最高。为了衡量h(x)的拟合度,使用代价函数$ J(θ_0,θ_1) $如下:

$$ J(θ_0,θ_1) = {1 \over 2m} {\sum_{i=1}^m(h_θ(x_i)-y_i)^2} $$

通过观察,不难发现,该公式实际计算的是,y的方差的均值。并且这个均值越小,说明拟合度越高。所以算法推导$ (θ_0,θ_1) $的过程,就是求$ J(θ_0,θ_1) $最小值的过程。

直观的看,我们可以把训练数据集看成散落在一个x-y的二维坐标系中的点,试图找到一条直线(由$ h_θ(x) $定义),穿过这些点。最终的目的是,找到一条这样的一条直线,使得这些点离这条直线的垂直距离最近。理想状态下,这条直线能够穿过所有的点,这时$ J(θ_0,θ_1) $为0。

这个代价函数也称为平法误差代价函数(Squared error function)均方误差(Mean squared error)。将均方除以2,是为了梯度下降算法的计算。下图总结了代价函数

《机器学习从入门到XX(一):线性回归与梯度下降》

为了更直观的观察代价函数,我们假设,需要预测的变量只有一个$ θ_1 $,那么h(x)如下:

$$ h(x)=θ_1x $$

这将是一条经过原点的直线。那么容易想到,随着斜率$ θ_1 $的变化,$ J(θ_1) $将呈现出一个如下类似抛物线的造型:

《机器学习从入门到XX(一):线性回归与梯度下降》

总能找到一个$ θ_1 $使得$ J(θ_1) $最小。

如果有两个变量$ J(θ_0,θ_1) $:

$$ h(x)=θ_0+θ_1x $$

那么$ J(θ_0,θ_1) $将同时受到两个变量的影响,这将是一个三维的图形:

《机器学习从入门到XX(一):线性回归与梯度下降》

因此,我们总能找到一组$ (θ_0,θ_1) $,使得$ J(θ_0,θ_1) $最小。用三维图观察并不直观,现在我们引入一种叫contour plot的图。观察上面的三维图,我们用一个平行于底面的平面穿过曲面,与曲面相交,形成一个类似椭圆的闭环,随着这个平面高度的变化,将产生无数的类似椭圆的闭环,如果将这些椭圆闭环投影到底面,将形成一个类似靶环的图形,就跟下图的右图一样,这称为contour plot

《机器学习从入门到XX(一):线性回归与梯度下降》

在同一个环上的点,对应不同的$ (θ_0,θ_1) $取值,但是他们的$ J(θ_0,θ_1) $是相同的。而靶环的中心点,就是能够使得$ J(θ_0,θ_1) $最小的$ (θ_0,θ_1) $取值:

《机器学习从入门到XX(一):线性回归与梯度下降》

梯度下降

现在我们有了hypothesis function和用于衡量hypothesis function中参数$ (θ_0,θ_1) $取值拟合度的cost function。现在将介绍第一个算法,称为Gradient Descent(梯度下降)。算法的目的是找到一组变量$ (θ_0,θ_1) $,使得他们的代价函数$ J(θ_0,θ_1) $最小。我们把代价函数假想成如下的三维图,好似有一座座的山头,如果我们从某个山头的某处出发,往下走,走到最低点,每一步往哪个方向取决于当前往哪个方向走最优,我们可能会走到A点。如果换一个点出发,我们可能走到B点:

《机器学习从入门到XX(一):线性回归与梯度下降》

在决定下一步往哪里走的时候,我们采取的方式是,找到当前这个点的切线方向(切线即导数),切线方向告诉我们应该往哪个方向走;另一个影响因素是,每一步大小α,这个参数我们称为learning rate学习速率。单次梯度下降迭代得到的往往是局部最优解,即上图的A,B两点是对于不同的起始点来说的最优解。

梯度下降算法描述如下:

重复如下步骤,直到收敛:

$$ θ_j := θ_j – α{∂ \over ∂θ_j}J(θ_0,θ_1), j=0,1 $$

上述公式中的:=表示赋值,而不是数学意义上的判等。上式的迭代过程就是,从初始的$ (θ_0,θ_1) $开始,对于每组$ (θ_0,θ_1) $计算$ J(θ_0,θ_1) $的导数,然后得到新的$ (θ_0,θ_1) $,重复计算,直到$ (θ_0,θ_1) $不再变化,即收敛。

为了更直观的展示算法,我们任然假设h(x)只有一个参数$ θ_1 $:

$$ h(x)=θ_1x $$

那么此时的算法可以描述为,重复如下过程直到收敛:

$$ θ_1 := θ_1 – α{∂ \over ∂θ_j}J(θ_1) $$

由于$ J(θ_1) $是关于$ θ_1 $的二次函数,所以$ ∂ \over ∂θ_j $ 表示$ θ_1 $所在点的切线斜率。从下图可以看出,当$ θ_1 $在上升沿时,斜率为正数,这会使得$ θ_1 $在迭代过程中逐渐减小;当$ θ_1 $在下降沿时,斜率为负数,这会使得$ θ_1 $在迭代过程中逐渐减增大,总之都是趋近于最低点的$ θ_1 $。

《机器学习从入门到XX(一):线性回归与梯度下降》

所以可以看到,算法巧妙的使用导数,让迭代过程自动趋向于正确的方向。

在算法中,$ α $是一个可调参数,当$ α $太小时,每次迭代,$ θ_1 $的变化很小,这样会算法的效率;而当$ α $太大时,每次迭代,$ θ_1 $的变化很大,这有可能会产生震荡,甚至无法收敛:

《机器学习从入门到XX(一):线性回归与梯度下降》

理想情况下,$ ∂ \over ∂θ_j $会在最低点,使得斜率为0,此时:

$$ θ_1 := θ_1 − α ∗ 0 $$

这样得到的新的$ θ_1 $不变,这就是收敛。

再考虑有两个变量$ (θ_0,θ_1) $的情况:

$$ h(x)=θ_0+θ_1x $$

前面我们将原本三维的代价函数,绘制成了contour plot,不难想象,在梯度下降算法的迭代过程中,$ (θ_0,θ_1) $总是从远离靶心的位置开始,向靠近靶心的位置移动,最终收敛在靶心

《机器学习从入门到XX(一):线性回归与梯度下降》

有了直观的认知后,我们给出Gradient Descent(梯度下降)的推导式,这样能够方便计算机进行计算:

重复如下过程,直到收敛:

$$ θ_0 := θ_0 – α{1 \over m} {\sum_{i=1}^m(h_θ(x_i)-y_i)} $$

$$ θ_1 := θ_1 – α{1 \over m} {\sum_{i=1}^m((h_θ(x_i)-y_i)x_i)} $$

具体的推导过程省略。


推荐阅读
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • cs231n Lecture 3 线性分类笔记(一)
    内容列表线性分类器简介线性评分函数阐明线性分类器损失函数多类SVMSoftmax分类器SVM和Softmax的比较基于Web的可交互线性分类器原型小结注:中文翻译 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 2020年第十一届蓝桥杯决赛JAVA B G题“皮亚诺曲线距离“的个人题解目录
    本文是2020年第十一届蓝桥杯决赛JAVA B G题“皮亚诺曲线距离“的个人题解目录。文章介绍了皮亚诺曲线的概念和特点,并提供了计算皮亚诺曲线上两点距离的方法。通过给定的两个点的坐标,可以计算出它们之间沿着皮亚诺曲线走的最短距离。本文还提供了个人题解的目录,供读者参考。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 本文分享了一位Android开发者多年来对于Android开发所需掌握的技能的笔记,包括架构师基础、高级UI开源框架、Android Framework开发、性能优化、音视频精编源码解析、Flutter学习进阶、微信小程序开发以及百大框架源码解读等方面的知识。文章强调了技术栈和布局的重要性,鼓励开发者做好学习规划和技术布局,以提升自己的竞争力和市场价值。 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
author-avatar
不完整的记忆721_560
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有