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

机器学习基石(四):概率角度分析机器学习的可行性

一、前言什么是机器学习的可行性?算法是否具备学习能力。衡量学习能力是通过在训练数据集之外的数据来进行验证。这个学习能力,也就是算法的泛化能力。在机器学

一、前言

什么是机器学习的可行性?
算法是否具备学习能力。衡量学习能力是通过在训练数据集之外的数据来进行验证。这个学习能力,也就是算法的泛化能力。在机器学习中,我们的目标是要寻找高泛化能力的模型。

二、从概率论到机器学习

构建一个弹珠罐子模型,其中装满绿色和橘色弹珠,从中抓一把个数为N的弹珠作为样本。如下图所示。

在这里插入图片描述
用数学语言来描述上图中ν\nuνμ\muμ的关系,就是著名的霍夫丁不等式(Hoeffding’s Inequality)

P[∣ν−μ∣>ϵ]≤2exp(−2ϵ2N)(1)P[|\nu-\mu| > \epsilon]\le 2 exp(-2\epsilon^2N) \tag 1P[νμ>ϵ]2exp(2ϵ2N)(1)

公式(1)说明,ν\nuνμ\muμ是否相似,与μ\muμ的具体数值无关,只与样本容量N,容忍度ϵ\epsilonϵ有关。


接下来,我们从弹珠罐子模型转到机器学习模型。

在这里插入图片描述
如上图所示的一一对应。
在罐子里,我们不知道橘色真实占据全部弹珠的比例,同样,对于某个固定的假设h(x)h(x)h(x),我们不知道是否就是目标函数f(x)f(x)f(x)

样本空间中的每一个样本点x∈X对应于bin中的每一个marble,当假设h(x)和f(x)不一样时,我们就把球漆成橘色;一样时,我们就把球漆成绿色。

从球罐中抽取的size-N marble对应到学习问题中的训练集D,采样方式均为iid采样。

球罐模型的目的是用抽样计算出的比例估计真实的比例,而学习问题中我们的目的是用样本内误差in sample error估计样本外误差out sample error。

对于某个固定的h假设,我们可以将样本内外误差做如下定义:

Eout(h)=εx→P[h(x)≠f(x)]E_{out}(h)=\varepsilon_{x\rightarrow P}[h(x)\ne f(x)]Eout(h)=εxP[h(x)=f(x)]

Ein(h)=1N∑n=1N[h(xn)≠yn]E_{in}(h)=\frac{1}{N}\sum_{n=1}^N[h(x_n)\ne y_n]Ein(h)=N1n=1N[h(xn)=yn]

其中EoutE_{out}Eout表示out-of-sample Error,整个P中犯错误的概率,样本外误差,期望损失;EinE_{in}Ein表示in-sample Error,在样本空间N中犯错误的概率,样本内误差。

现在,我们就可以使用EoutE_{out}EoutEinE_{in}Ein重写霍夫丁不等式:
P[∣Ein(h)−Eout(h)∣>ϵ]≤2exp(−2ϵ2N)(2)P[|E_{in}(h)-E_{out}(h)| > \epsilon]\le 2 exp(-2\epsilon^2N) \tag 2P[Ein(h)Eout(h)>ϵ]2exp(2ϵ2N)(2)

同样,在使用样本求出来的EinE_{in}Ein,在样本数量N足够大的情况下,也能近似表示EoutE_{out}Eout,前提是都是针对该固定的h假设。

所以在手中拿着fixed的假设h的时候,如果Ein(h)E_{in}(h)Ein(h)很小的话,根据公式(2)也可以PAC(probably approximately correct)的说明Eout(h)E_{out}(h)Eout(h)也很小。也就说明,这时候的h和f很接近。

但是,截止目前为止,我们所有推论仅仅用于验证h是否是一个好的假设。至于固定的这个hhh,我们没办法保证他一定会生成很小的Ein(h)E_{in}(h)Ein(h)

三、在假说集合中挑选h

在上一节的基础上做拓展。我们一个假说,对应一个bin,那么有很多假说时候,就表示我们有很多bin。很容易做出推断,判断某个假说是否为好的假说,就是在看Ein(hi)E_{in}(h_i)Ein(hi)是否足够小。
在这里插入图片描述

真的是这样吗?

如上图所示,在假设hMh_MhM下,我们get到全为绿色的球,说明使用该假说的话,能够达到100%的准确率。但是从上帝视角来看,该EinE_{in}EinEoutE_{out}Eout还差很多。

接下来,我们来量化分析下,在多种h假设中选取最佳h的情境,对应的数学模型。

首先,定义坏的sample。

如果这份样本使得EinE_{in}EinEoutE_{out}Eout相差很多,我们将这份sample称为 BAD sample

霍夫丁不等式告诉我们,对于某个fixed h,出现BAD sample的概率是有限的。如下图所示:
在这里插入图片描述

但是,当整个学习过程中存在选择的时候,我们往往会选择对应EinE_{in}Ein小的h,这其中就有了偏见,不再公平。

用铜板举例子:

用铜板丢正反面,一次试验(一个固定的h)的时候,五次都为正面的概率为1/32, 如果重复150次试验(150个h),那么其中出现五次正面的概率高达99%。如果我们在其中挑选最好的那个h,基本拿到5次正面的那个h的概率就是99%以上。

我们来看在很多假设h的时候,如何定义bad sample
在这里插入图片描述
只要存在h使得该sample属于bad sample,我们就将其定义为bad sample

那么在算法可以自由在h中做挑选的时候,选中的概率bad sample的概率计算方法如下:
在这里插入图片描述

综上,如果∣H∣=M|H|=MH=M,其中M有限(H假设空间的h个数有限),N足够大,那么我们总能找到h,使得Ein(h)E_{in}(h)Ein(h)最接近0,同样对应Eout(h)E_{out}(h)Eout(h)也最接近0
这说明机器学习在一定范围内是可行的,我们的确能够学到一些东西,使得算法拥有对应的泛化能力。

四、总结

在这里插入图片描述
上图中黑色实线流程,与之前机器学习流程没有差别。

虚线部分,就是本章的重点,左侧指向training examples表示产生样本的方式。右侧的x表明,用于验证算法g的数据。

同样说明,用于测试和用于训练的数据,都是来源于同一个distribution。

最后,本节面向的对象是假说集hypothesis set H中容量有限的(finited M),如果M无限多的情况怎么办(LPA中无限条的线),我们会在接下来章节重点研究解决。


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
author-avatar
刘华兰2011_423
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有