概述

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

  • 监督学习(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. c++中static变量有什么用

    主要有两点用途. 1.让一个变量长期有效,而不管其是在什么地方被申明.比如: int fun1() { static int s_value = 0; .... } 那么fun1不管在什么地方被调用, ...

  2. WC前的小计划

    写在前面的.. 要去WC了好开心的呢.. 但是之前荒废了好多时间呢.. 好吧从明天开始加紧训练,目标是:WC前bzoj300t..(现在是260呢..) 开始吧 来看看完成情况: 40/40 [201 ...

  3. redis键值操作

    1.1. redis键值操作 1.1.1. keys patten 查询相应的key 可以精确的查,也可以模糊的查 1.1.1.1. 通配符:* ? [] 在redis里,模糊查询key的时候有3个通 ...

  4. R语言语法基础一

    R语言语法基础一 Hello world #这里是注释 myString = "hello world" print(myString) [1] "hello world ...

  5. 初学JDBC的一些总结(二)

    一.简单介绍PreparedStatement 和Statement的区别: PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement.Prepare ...

  6. Oracle CPU使用率过高问题处理

    1.下载Process Explorer 2.打开Process Explorer,查看CPU使用情况最高的进程 3.双击该进程,查看详情 \ 4.    获取cpu使用最好的线程tid 5.     ...

  7. elastic-job详解(四):失效转移

    elastic-job中最关键的特性之一就是失效转移.配置了失效转移之后,如果在任务执行过程中有一个执行实例挂了,那么之前被分配到这个实例的任务(或者分片)会在下次任务执行之前被重新分配到其他正常节点 ...

  8. 5月25号开学! 第13期《python3自动化测试selenium+接口》课程,python零基础也能学

    2019年 第13期<python3自动化测试selenium+接口>课程,5月25号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学 本期上课时间:5月25号-7月28号,每周 ...

  9. HEVC与VP9之间的对比

    在streamingmedia上看到的一篇对比HEVC与VP9的文章,挺不错.另外这边文章的几个comment也是不错的. 下面是全文.   The Great UHD Codec Debate: G ...

  10. 利用Caffe训练模型(solver、deploy、train_val) + python如何使用已训练模型

    版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! https://blog.csdn.net/sinat_26917383/article/details/5 ...