概述

在机器学习领域,主要有三类不同的学习方法:

  • 监督学习(Supervised learning)
  • 非监督学习(Unsupervised learning)
  • 半监督学习(Semi-supervised learning)

定义

监督学习:通过已有的一部分输入数据与输出数据之间的对应关系,生成一个函数,将输入映射到合适的输出,例如分类。

非监督学习:直接对输入数据集进行建模,例如聚类。

半监督学习:综合利用有类标的数据和没有类标的数据,来生成合适的分类函数。

区别

是否有监督(supervised),就看输入数据是否有标签(label)输入数据有标签,则为有监督学习,没标签则为无监督学习。

标签,简而言之,就是样本的分类标签,是不重合的,比如男/女,价值/非价值。

举个例子,判断一支股票是价值型还是非价值型。我们有三只股票:

现在要做一个分类系统,很显然,那就是如果PE-Ratio(市盈率)大于3,就是价值型股票。

分类系统做好了,现在新来一支股票,PE-Ratio是4,系统判断4>3,那就是价值股票。

监督学习

监督学习最常见的是分类问题,因为目标往往是让计算机去学习已经创建好的分类系统,例如数字识别。更一般地说,对于那些有用的、容易判断的分类系统,分类学习都适用。在某些情况下,如果Agent能自行计算分类的话,Agent可能不需要事先给出分类。这将在后面成为无监督学习上下文分类的一个例子。

监督学习是训练神经网络和决策树的最常见技术。这两种技术(神经网络和决策树)高度依赖于事先确定的分类系统给出的信息。对于神经网络来说,分类系统用于判断网络的错误,然后调整网络适应它;对于决策树,分类系统用来判断哪些属性提供了最多的信息,如此一来可以用它解决分类系统的问题。我们将会看到这两者(神经网络和决策树)更多的细节,但在目前,它们用预先确定分类方法的形式来“监督”就足够了。

使用隐马尔科夫模型和贝斯网络的语音识别系统也依赖于某些监督的要素,那通常是为了调节系统的参数以便于最小化给定输入中的错误。

请注意这里提到的一个问题:在分类问题中,学习算法的目标是把给定输入中的错误最小化。这些输入通常被称作“训练集”(原文为training set,译者注),它们是Agent尝试学习的样本。但是,学习训练集表现良好并不一定是件好事。例如,如果我试图教你学习exclusive-or(及逻辑或,译者注),但仅仅给出由一个真和一个假构成的组合,而不把同时为真或为假的组合告诉你,那么根据你学到的规则,你可能对任何问题回答都为真。同样,对于机器学习算法,一个通常的问题是过适合(原文为over-fitting,译者注)数据,以及主要记忆训练集,而不是学习过多的一般分类技术。

你可以这样设想,并不是所有的训练集的输入都分类正确。如果使用的算法有足够强的记忆力,但这显然是“特例”,不适合一般的原则,因此会出现问题。这一点也可能导致过适合。不但要在学习复杂函数时足够强大,而且能产生可概括的结论,寻找这样的算法的确是一个挑战。

训练资料是由输入物件(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。

一个监督式学习者的任务在观察完一些训练范例(输入和预期输出)后,去预测这个函数对任何可能出现的输入的值的输出。

要达到此目的,学习者必须以"合理"(见归纳偏向)的方式从现有的资料中一般化到非观察到的情况。在人类和动物感知中,则通常被称为概念学习(concept learning)。

监督式学习有两种形态的模型。最一般的,监督式学习产生一个全域模型,会将输入物件对应到预期输出。而另一种,则是将这种对应实作在一个区域模型。(如案例推论及最近邻居法)。

为了解决一个给定的监督式学习的问题(手写辨识),必须考虑以下步骤:

  1. 决定训练资料的范例的形态。在做其它事前,工程师应决定要使用哪种资料为范例。譬如,可能是一个手写字符,或一整个手写的词汇,或一行手写文字。
  2. 搜集训练资料。这资料须要具有真实世界的特征。所以,可以由人类专家或(机器或传感器的)测量中得到输入物件和其相对应输出。
  3. 决定学习函数的输入特征的表示法。学习函数的准确度与输入的物件如何表示是有很大的关联度。传统上,输入的物件会被转成一个特征向量,包含了许多关于描述物件的特征。因为维数灾难的关系,特征的个数不宜太多,但也要足够大,才能准确的预测输出。
  4. 决定要学习的函数和其对应的学习算法所使用的数据结构。譬如,工程师可能选择人工神经网络和决策树。
  5. 完成设计。工程师接着在搜集到的资料上跑学习算法。可以借由将资料跑在资料的子集(称为验证集)或交叉验证(cross-validation)上来调整学习算法的参数。参数调整后,算法可以运行在不同于训练集的测试集上

另外对于监督式学习所使用的词汇则是分类。现在有各种各样的分类器,各自都有强项或弱项。分类器的表现很大程度上地跟要被分类的数据特征有关。并不存在一个适用于所有问题的分类器。决定适合某一问题的分类器仍旧是一项艺术,而非科学。

目前最广泛被使用的分类器有人工神经网络、支持向量机、最近邻居法、高斯混合模型、朴素贝叶斯方法、决策树和径向基函数分类。

无监督式学习

非监督学习看起来非常困难:目标是我们不告诉计算机怎么做,而是让它(计算机)自己去学习怎样做一些事情。非监督学习一般有两种思路。第一种思路是在指导Agent时不为其指定明确的分类,而是在成功时采用某种形式的激励制度。需要注意的是,这类训练通常会置于决策问题的框架里,因为它的目标不是产生一个分类系统,而是做出最大回报的决定。这种思路很好的概括了现实世界,Agent可以对那些正确的行为做出激励,并对其他的行为进行处罚。

强化学习的一些形式常常可以被用于非监督学习,由于没有必然的途径学习影响世界的那些行为的全部信息,因此Agent把它的行为建立在前一次奖惩的基础上。在某种意义上,所有的这些信息都是不必要的,因为通过学习激励函数,Agent不需要任何处理就可以清楚地知道要做什么,因为它(Agent)知道自己采取的每个动作确切的预期收益。对于防止为了计算每一种可能性而进行的大量计算,以及为此消耗的大量时间(即使所有世界状态的变迁概率都已知),这样的做法是非常有益的。另一方面,在尝试出错上,这也是一种非常耗费时间的学习。

不过这一类学习可能会非常强大,因为它假定没有事先分类的样本。在某些情况下,例如,我们的分类方法可能并非最佳选择。在这方面一个突出的例子是Backgammon(西洋双陆棋)游戏,有一系列计算机程序(例如neuro-gammon和TD-gammon)通过非监督学习自己一遍又一遍的玩这个游戏,变得比最强的人类棋手还要出色。这些程序发现的一些原则甚至令双陆棋专家都感到惊讶,并且它们比那些使用预分类样本训练的双陆棋程序工作得更出色。

一种次要的非监督学习类型称之为聚合(原文为clustering,译者注)。这类学习类型的目标不是让效用函数最大化,而是找到训练数据中的近似点。聚合常常能发现那些与假设匹配的相当好的直观分类。例如,基于人口统计的聚合个体可能会在一个群体中形成一个富有的聚合,以及其他的贫穷的聚合。

无监督式学习(Unsupervised Learning )是人工智能网络的一种算法(algorithm),其目的是去对原始资料进行分类,以便了解资料内部结构。有别于监督式学习网络,无监督式学习网络在学习时并不知道其分类结果是否正确,亦即没有受到监督式增强(告诉它何种学习是正确的)。其特点是仅对此种网络提供输入范例,而它会自动从这些范例中找出其潜在类别规则。当学习完毕并经测试后,也可以将之应用到新的案例上。

无监督学习里典型的例子就是聚类了。聚类的目的在于把相似的东西聚在一起,而我们并不关心这一类是什么。因此,一个聚类算法通常只需要知道如何计算相似度就可以开始工作了。

半监督学习

半监督学习的基本思想是利用数据分布上的模型假设, 建立学习器对未标签样本进行标签。
形式化描述为:
给定一个来自某未知分布的样本集S=L∪U, 其中L 是已标签样本集L={(x1,y1),(x2,y2), … ,(x |L|,y|L|)}, U是一个未标签样本集U={x’1,x’2,…,x’|U|},希望得到函数f:X → Y可以准确地对样本x预测其标签y,这个函数可能是参数的,如最大似然法;可能是非参数的,如最邻近法、神经网络法、支持向量机法等;也可能是非数值的,如决策树分类。其中, x与x’ 均为d 维向量, yi∈Y 为样本x i 的标签, |L| 和|U| 分别为L 和U 的大小, 即所包含的样本数。半监督学习就是在样本集S 上寻找最优的学习器。如何综合利用已标签样例和未标签样例,是半监督学习需要解决的问题。

半监督学习问题从样本的角度而言是利用少量标注样本和大量未标注样本进行机器学习,从概率学习角度可理解为研究如何利用训练样本的输入边缘概率 P( x )和条件输出概率P ( y | x )的联系设计具有良好性能的分类器。这种联系的存在是建立在某些假设的基础上的,即聚类假设(cluster assumption)和流形假设(maniford assumption)。

总结

非监督学习已经获得了巨大的成功,例如西洋双陆棋程序world-champion calibre以及自动驾驶技术。当有一种为行为赋予权值的简单方法时,它可以成为一项强大的技术。当有足够的数据构成聚类(尽管有时这非常困难),聚合可能会非常有用,特别是一个聚类中关于成员的附加数据由于这些附加的数据可以用于产生更多的结果。

如果有恰当的分类系统(例如疾病处理程序,它一般会在实施自动诊断之后直接决定设计),分类学习也会非常强大,或者当分类是一件非常简单的事情,此时我们非常乐于让计算机为我们进行识别。如果通过算法作出的决定需要输入别的地方,这时分类学习是必要的。否则,对于需要输入的一方来说,计算它的含义将会非常困难。

这两种技术都非常有价值,你需要根据当时的情况决定需要选用哪一种技术——要解决什么类型的问题,解决它需要多少时间(通常来说,监督学习和聚合要比强化学习更快),以及是否监督学习更有可能解决这个问题。

【ML入门系列】(三)监督学习和无监督学习的更多相关文章

  1. machine learning----->有监督学习和无监督学习的区别

    1.有监督学习和无监督学习的区别: 1.1概述: 有监督学习是知道变量值(数据集)和结果(已知结果/函数值),但是不知道函数样式(函数表达式)的情况下通过machine learning(ML)获得正 ...

  2. C# 互操作性入门系列(三):平台调用中的数据封送处理

    好文章搬用工模式启动ing ..... { 文章中已经包含了原文链接 就不再次粘贴了 言明 改文章是一个系列,但只收录了2篇,原因是 够用了 } --------------------------- ...

  3. [转]C# 互操作性入门系列(三):平台调用中的数据封送处理

    参考网址:https://www.cnblogs.com/FongLuo/p/4512738.html C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列( ...

  4. mybatis入门系列三之类型转换器

    mybatis入门系列三之类型转换器 类型转换器介绍 mybatis作为一个ORM框架,要求java中的对象与数据库中的表记录应该对应 因此java类名-数据库表名,java类属性名-数据库表字段名, ...

  5. Coursera机器学习笔记(一) - 监督学习vs无监督学习

    转载 http://daniellaah.github.io/2016/Machine-Learning-Andrew-Ng-My-Notes-Week-1-Introduction.html 一. ...

  6. Pytorch_第五篇_深度学习 (DeepLearning) 基础 [1]---监督学习与无监督学习

    深度学习 (DeepLearning) 基础 [1]---监督学习与无监督学习 Introduce 学习了Pytorch基础之后,在利用Pytorch搭建各种神经网络模型解决问题之前,我们需要了解深度 ...

  7. ActiveMQ入门系列三:发布/订阅模式

    在上一篇<ActiveMQ入门系列二:入门代码实例(点对点模式)>中提到了ActiveMQ中的两种模式:点对点模式(PTP)和发布/订阅模式(Pub & Sub),详细介绍了点对点 ...

  8. 监督学习 VS 无监督学习

    监督学习 就是人们常说的分类,通过已有的训练样本(即已知数据以及其对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优则表示在某个评价准则下是最佳的),再利用这个模型将所有的输入映射为 ...

  9. 监督学习,无监督学习常用算法集合总结,引用scikit-learn库(监督篇)

    why写这篇blog 最近在接触这方面的知识,但是找了许多的笔记,都感觉没有很好的总结出来,也正好当做是边学习,边复习着走.大佬轻喷.参考书目<python机器学习基础教程> 将分别从以下 ...

随机推荐

  1. Docker——error pulling image configuration

    执行Docker命令 $ docker image build . 报错如下: error pulling image configuration: Get https://production.cl ...

  2. 第二章 STM32的结构和组成

    2.5 芯片里面有什么 STM32F103采用的是Cortex-M3内核,内核即CPU,由ARM公司设计. ARM公司并不生产芯片,而是出售其芯片技术授权. 芯片生产厂商(SOC)如ST.TI.Fre ...

  3. redis(二)

    基本配置 在源文件/usr/local/redis目录下,文件redis.conf为配置文件 绑定地址:如果需要远程访问,可将此行注释 bind 127.0.0.1 端口,默认为6379 port 6 ...

  4. Making the Grade [POJ3666] [DP]

    题意: 给定一个序列,以最小代价将其变成单调不增或单调不减序列,代价为Σabs(i变化后-i变化前),序列长度<=2000,单个数字<=1e9 输入:(第一行表示序列长度,之后一行一个表示 ...

  5. Flask jinja2

    {{ }} #引用 执行 非逻辑代码 {% %} #逻辑代码 引用变量 @app.template_global() # 全局函数 Markup # 安全标签字符串儿 {% macro func() ...

  6. 3ds max学习笔记-- 复合对象运算

    1,ProBoolean(超级布尔) 栗子: 新建一长方体,两个圆柱体,如下: 选择底部长方体,进入[复合对象],修改[操作],单击[拾取操作对象B],点击圆柱: 效果如下,线面较多: 高级布尔效果图 ...

  7. 3ds max学习笔记(七)-- 实例操作(桌子)

    首先[自定义]/[单位设置],将公制和系统的单位都设置成mm(毫米) 若软件右侧无[标准基本体]那么可以选择[创建]/标准基本体/扩展基本体.... 1.创建一个长方体(作为桌面)完成后,点击菜单栏[ ...

  8. js 事件冒泡、捕获;call()、apply()

    他们是描述事件触发时序问题的术语.事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件.相反的,事件冒泡是自下而上的去触发事件.绑定事件方法的第三个参数,就是控制事件触发顺序是 ...

  9. 【贪心】经营与开发 @upc_exam_5500

    目录 经营与开发 @upc_exam_5500 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 SOLUTION CODE 经营与开发 @upc_exam_5500 PROBLEM 题 ...

  10. ubuntu下使用crontab

    创建crontab任务 参考:https://www.cnblogs.com/Icanflyssj/p/5138851.html 3. crontab常用的几个命令格式 crontab -l //显示 ...