零:机器学习介绍

视频地址

定义

定义1

给予计算机学习能力的领域。
  • Samuel的定义可以回溯到50年代,他编写了一个西洋棋程序。 这程序神奇之处在于,编程者自己并不是个下棋高手。 但因为他太菜了,于是就通过编程, 让西洋棋程序自己跟自己下了上万盘棋。通过观察 哪种布局(棋盘位置)会赢,哪种布局会输, 久而久之,这西洋棋程序明白了什么是好的布局, 什么样是坏的布局。然后就牛逼大发了,程序通过学习后, 玩西洋棋的水平超过了Samuel。这绝对是令人注目的成果。 尽管编写者自己是个菜鸟,但因为 计算机有着足够的耐心,去下上万盘的棋, 一般人不会有这种耐心去下这么多盘棋。通过这些练习, 计算机获得无比丰富的经验,于是渐渐成为了 比Samuel更厉害的西洋棋手。

    定义2:

    由Tom Mitchell提出,来自卡内基梅隆大学.一个好的学习一个程序被认为能从经验E中学习,解决任务 T,达到 性能度量值P,当且仅当,有了经验E后,经过P评判, 程序在处理 T 时的性能有所提升
  • 在西洋棋那例子中,
    • 经验E :程序上万次的自我练习的经验
    • 任务T :就是下棋。
    • 性能度量值p:,就是它在与一些新的对手比赛时,赢得比赛的概率。
  • 目主要的两种类型学习算法被我们称之为监督学习无监督学习
    • 监督学习:我们将教计算机如何去完成任务
    • 无监督学习:让它自己进行学习。

      监督学习(Supervised Learning)

      例子1:

  • 假设你想预测房价, 之前,某学生已经从某地收集了数据集其中一个数据集是这样的。 这是横坐标,即不同房子的面积,单位平方 纵轴上是房价,单位 千美元。

_1526485168_1551005604_1539942902_1526485168_1551005604.png

  • 根据给定数据,假设你朋友有栋房子,750平尺(70平米) 想知道这房子能卖多少,好卖掉。 那么,学习算法怎么帮你呢?学习算法可以: 绘出一条直线,让直线尽可能匹配到所有数据。 基于此,看上去,那个房子应该、可能、也许、大概 卖到15万美元(一平米两千刀!)。

_1526485361_1959833259_1539942923_1526485361_1959833259.png

  • 但这不是唯一的学习算法。 可能还有更好的。比如不用直线了, 可能平方函数会更好, 即二次多项式更符合数据集。如果你这样做, 预测结果就应该是20万刀(一平三千刀,涨价好快)。 后面我们会介绍到如何选择 是选择直线还是平方函数来拟合。 没有明确的选择,就不知哪个能给你的朋友 更好的卖房建议。只是这些每个都是很好的学习算法例子。 也是监督学习的例子。

_1526485380_1269206818_1539942939_1526485380_1269206818.png

术语监督学习,意指给出一个算法, 需要部分数据集已经有正确答案。比如给定房价数据集, 对于里面每个数据,算法都知道对应的正确房价, 即这房子实际卖出的价格。算法的结果就是 算出更多的正确价格,比如那个新房子, 你朋友想卖的那个。用更术语的方式来定义, 监督学习又叫回归问题(regression problem),(应该是回归属于监督中的一种) 意指要预测一个连续值的输出,比如房价。 虽然从技术上,一般把房价记到美分单位。 所以实际还是个离散值,但通常把它看作实际数字, 是一个标量值,一个连续值的数,而术语回归, 意味着要预测这类连续值属性的种类

例子2:

  • 另一个监督学习的例子,我和一些朋友 之前研究的领域。让我们来看医学记录, 并预测胸部肿瘤是恶性良性。 如果某人发现有胸部肿瘤,恶性肿瘤有害又危险, 良性肿瘤则是少害。 显然人们很关注这个。让我们看一个收集好的数据集,

_1526485436_1662003455_1539942955_1526485436_1662003455.png

  • 假设在数据集中,横轴表示肿瘤的大小, 纵轴我打算圈上0或1,是或否, 即肿瘤是恶性的(红色叉叉)还是良性(蓝色叉叉)的。 所以如图所示,可以看到这个大小的肿瘤块 是良性的,还有这些大小的都是良性的。 不幸地是也看到一些恶性肿瘤,比如这些大小的肿瘤。 所以,有5个良性块,在这一块, 还有5个恶性的,它们纵轴值为1.

_1526485466_72624286_1539942971_1526485466_72624286.png

  • 现在假设某人杯具地得胸部肿瘤了, 大小大概是箭头指向这么大。 对应的机器学习问题就是,你能否估算出一个概率, 即肿瘤为恶或为良的概率? 专业地说,这是个分类问题(classification problem)分类是要预测一个离散值输出。 这里是0或1,恶性或良性。

_1526485496_2090819363_1539943001_1526485496_2090819363.png

  • 事实证明, 在分类问题中,有时会有超过两个的值, 输出的值可能超过两种。举个具体例子, 胸部肿瘤可能有三种类型,所以要预测离散值0,1,2,3 ,假设总共有三种癌症。
    • 0就是良性肿瘤,没有癌症。
    • 1 表示1号癌症
    • 2 是2号癌症,
    • 3 就是3号癌症
    • 这同样是个分类问题,因为它的输出的离散值集合 分别对应于无癌,1号,2号,3号癌症
  • 我再露一小手,在分类问题中,还有另一种作图方式 来描述数据—我画你猜。要用到些许不同的符号集合来描绘数据。如果肿瘤大小作为唯一属性, 被用于预测恶性良性,可以把数据作图成这样。 使用不同的符号来表示良性和 恶性,即阴性和阳性。所以,不再统一画叉叉了, 改用圈圈来代表良性肿瘤,就像这样。 仍沿用X(叉叉)代表恶性肿瘤。希望你能明白。 我所做的就是,把在上面的数据, 映射下来。再用不同的符号, 圈和叉来分别代表良性和恶性。

_1526485537_359149279_1539943034_1526485537_359149279.png

  • 在上例中,只使用了一个特征属性,即肿瘤块大小, 来预测肿瘤是恶性良性。在其它机器学习问题里, 有着不只一个的特征和属性。
  • 举个例子,现在不只是知道肿瘤大小, 病人年龄和肿瘤大小都知道了。这种情况下, 数据集如表图所示,有些病人,年龄、肿瘤已知, 不同的病人,会有一点不一样, 肿瘤恶性,则用叉来代表。所以,假设 有一朋友得了肿瘤。肿瘤大小和年龄 落在此处。那么依据这个给定的数据集,学习算法 所做的就是画一条直线,分开 恶性肿瘤和良性肿瘤,所以学习算法会 画条直线,像这样,把两类肿瘤分开。 然后你就能判断你朋友的肿瘤是…了 如果它在那边,学习算法就说 你朋友的肿瘤在良性一边,因此更可能 是良性的。

_1526485695_454140810_1539943078_1526485695_454140810.png

  • 好,本例中,总共有两个特征, 即病人年龄和肿瘤大小。在别的ML(机器学习)问题中, 经常会用到更多特征,我朋友研究这个问题时, 通常使用这些特征:比如块的厚度,即胸部肿瘤的厚度 肿瘤细胞大小和形状的一致性, 等等。它表明, 最有趣的学习算法(本课中将学到) 能够处理,无穷多个特征。不是3到5个这么少。 在这张幻灯片中,我已经列举了总共5个不同的特征。 但对于一些学习问题, 真要用到的不只是三五个特征, 要用到无数多个特征,非常多的属性, 所以,你的学习算法要使用很多的属性 或特征、线索来进行预测。
  • 那么,你如何处理无限多特征呢?甚至你如何存储无数的东西 进电脑里,又要避免内存不足? 事实上,等我们介绍一种叫支持向量机的算法时, 就知道存在一个简洁的数学方法,能让电脑处理无限多的特征。 想像下,我不是这边写两个特征, 右边写三个特征。而是,写一个无限长的特征表, 不停地写特征,似乎是个无限长的特征的表。 但是,我们也有能力设计一个算法来处理这个问题。
  • 本课中,我们介绍监督学习。 其基本思想是,监督学习中,对于数据集中的每个数据, 都有相应的正确答案(训练集) ,算法就是基于这些来做出预测.就像那个房价, 或肿瘤的性质。后面介绍了回归问题。 即通过回归来预测一个连续值输出。 我们还谈到了分类问题, 目标是预测离散值输出
  • 下面是个小测验题目: 假设你有家公司,希望研究相应的学习算法去 解决两个问题。第一个问题,你有一堆货物的清单。 假设一些货物有几千件可卖, 你想预测出,你能在未来三个月卖出多少货物。 第二个问题,你有很多用户, 你打算写程序来检查每个用户的帐目。 对每个用户的帐目, 判断这个帐目是否被黑过(hacked or compromised)。 请问,这两个问题是分类问题,还是回归问题?
  • 问题一是个回归问题 因为如果我有几千件货物, 可能只好把它当作一个实际的值,一个连续的值。 也把卖出的数量当作连续值。 第二个问题,则是分类问题,因为可以把 我想预测的一个值设为0,来表示账目没有被hacked 另一个设为1,表示已经被hacked。 就像乳癌例子中,0表示良性,1表示恶性。 所以这个值为0或1,取决于是否被hacked, 有算法能预测出是这两个离散值中的哪个。 因为只有少量的离散值,所以这个就是个分类问题。

小小的总结

  • 在监督式学习中,我们给了一个数据集,并且已经知道我们的正确输出应该是什么样子,并且有输入和输出之间有关系的想法。
  • 监督学习问题分为“回归”和“分类”问题。
    • 回归问题中,我们试图预测连续输出中的结果,这意味着我们试图将输入变量映射到某个连续函数
    • 分类问题中,我们试图预测离散输出的结果。换句话说,我们试图将输入变量映射到离散类别
  • 例子
    1. 回归 —– 给定一个人的照片,我们必须根据给定的图片来预测他们的年龄
    2. 分类 —– 给予患有肿瘤的患者,我们必须预测肿瘤是恶性的还是良性的。

无监督学习(Unsupervised Learning)

在上一节视频中 我们已经讲过了监督学习 回想起上次的数据集 每个样本 都已经被标明为 正样本或者负样本 即良性或恶性肿瘤

_1526485792_1823245979_1539943092_1526485792_1823245979.png

  • 因此 对于监督学习中的每一个样本 我们已经被清楚地告知了 什么是所谓的正确答案 即它们是良性还是恶性 在无监督学习中 我们用的数据会和监督学习里的看起来有些不一样 在无监督学习中 没有属性或标签这一概念 也就是说所有的数据都是一样的,没有区别
  • 所以在无监督学习中 我们只有一个数据集 没人告诉我们该怎么做 我们也不知道每个数据点究竟是什么意思,相反 它只告诉我们:现在有一个数据集 你能在其中找到某种结构吗? 对于给定的数据集,无监督学习算法可能判定,该数据集包含两个不同的聚类,这是第一个聚类,然后这是另一个聚类 .无监督学习算法 会把这些数据分成两个不同的聚类,所以这就是所谓的聚类算法

_1526485838_932487436_1539943106_1526485838_932487436.png

例子1

  • 我们来举一个聚类算法的例子 Google 新闻的例子 如果你还没见过这个页面的话 你可以到这个URL:news.google.com 去看看谷歌新闻每天都在干什么呢? 他们每天会去收集成千上万的网络上的新闻然后将他们分组组成一个个新闻专题
  • 比如 让我们来看看这里,这里的URL链接连接着不同的有关BP油井事故的报道,所以 让我们点击 这些URL中的一个 恩 让我们点一个 然后我们会来到这样一个网页 这是一篇来自华尔街日报的 有关……你懂的 有关BP油井泄漏事故的报道 标题为《BP杀死了Macondo》 Macondo 是个地名 就是那个漏油事故的地方 如果你从这个组里点击一个不同的URL 那么你可能会得到不同的新闻 这里是一则CNN的新闻 是一个有关BP石油泄漏的视频 如果你再点击第三个链接 又会出现不同的新闻 这边是英国卫报的报道 也是关于BP石油泄漏
  • 所以 谷歌新闻所做的就是 去搜索成千上万条新闻 然后自动的将他们聚合在一起 因此 有关同一主题的 新闻被显示在一起 实际上 聚类算法和无监督学习算法 也可以被用于许多其他的问题

_1526485861_1249334585_1539943121_1526485861_1249334585.png

例子2

  • 这里我们举个它在基因组学中的应用
  • 下面是一个关于基因芯片的例子 基本的思想是 给定一组不同的个体,对于每个个体,检测它们是否拥有某个特定的基因 也就是说,你要去分析有多少基因显现出来了 因此 这些颜色 红 绿 灰 等等 它们 展示了这些不同的个体 是否拥有一个特定基因 的不同程度
  • 然后你能做的就是 运行一个聚类算法 把不同的个体归入不同的类 或归为不同类型的人

_1526485895_1918759847_1539943134_1526485895_1918759847.png

  • 这就是无监督学习 我们没有提前告知这个算法 这些是第一类的人 这些是第二类的人 这些是第三类的人等等 相反我们只是告诉算法 你看 这儿有一堆数据 我不知道这个数据是什么东东 我不知道里面都有些什么类型 叫什么名字 我甚至不知道都有哪些类型 但是 请问你可以自动的找到这些数据中的类型吗? 然后自动的 按得到的类型把这些个体分类 虽然事先我并不知道哪些类型 因为对于这些数据样本来说 我们没有给算法一个正确答案,所以这就是无监督学习

其他例子

  • 无监督学习或聚类算法在其他领域也有着大量的应用

它被用来组织大型的计算机集群

  • 我有一些朋友在管理 大型数据中心 也就是 大型计算机集群 并试图 找出哪些机器趋向于 协同工作 如果你把这些机器放在一起 你就可以让你的数据中心更高效地工作

_1526485943_1884734823_1539943144_1526485943_1884734823.png

用于社交网络的分析

  • 所以 如果可以得知 哪些朋友你用email联系的最多 或者知道你的Facebook好友 或者你Google+里的朋友 知道了这些之后 我们是否可以自动识别 哪些是很要好的朋友组 哪些仅仅是互相认识的朋友组

_1526485965_1931576913_1539943156_1526485965_1931576913.png

还有在市场分割中的应用

  • 许多公司拥有庞大的客户信息数据库,那么,给你一个客户数据集,你能否自动找出不同的市场分割,并自动将你的客户分到不同的细分市场中.从而有助于我在不同的细分市场中进行更有效的销售
  • 这也是无监督学习 我们现在有 这些客户数据 但我们预先并不知道 有哪些细分市场 而且 对于我们数据集的某个客户 我们也不能预先知道 谁属于细分市场一 谁又属于细分市场二等等 但我们必须让这个算法自己去从数据中发现这一切

_1526486000_1961140321_1539943168_1526486000_1961140321.png

天文数据分析 通过这些聚类算法

  • 我们发现了许多 惊人的、有趣的 以及实用的 关于星系是如何诞生的理论 所有这些都是聚类算法的例子 而聚类只是无监督学习的一种

_1526486023_1506023228_1539943178_1526486023_1506023228.png

鸡尾酒宴问题

  • 恩 我想你参加过鸡尾酒会的 是吧? 嗯 想象一下 有一个宴会 有一屋子的人 大家都坐在一起 而且在同时说话 有许多声音混杂在一起 因为每个人都是在同一时间说话的 在这种情况下你很难听清楚你面前的人说的话
  • 因此 比如有这样一个场景 宴会上只有两个人 两个人 同时说话 恩 这是个很小的鸡尾酒宴会 我们准备好了两个麦克风 把它们放在房间里 然后 因为这两个麦克风距离这两个人 的距离是不同的 每个麦克风都记录下了 来自两个人的声音的不同组合

_1526486053_1219325593_1539943187_1526486053_1219325593.png

  • 也许A的声音 在第一个麦克风里的声音会响一点 也许B的声音 在第二个麦克风里会比较响一些 因为2个麦克风 的位置相对于 2个说话者的位置是不同的 但每个麦克风都会录到 来自两个说话者的重叠部分的声音

_1526486064_1893704755_1539943199_1526486064_1893704755.png

  • 一个研究员录下的两个说话者的声音,无监督学习算法可以将两种混合在一起的音频分开
  • 所以,你可以看到,像这样的无监督学习算法,看起来 为了 构建这个应用程序 做这个音频处理 似乎需要写好多代码啊 或者需要链接到 一堆处理音频的Java库 貌似需要一个非常复杂的程序,分离出音频等
  • 实际上,要实现混合音频分离的效果,只需要一行代码就可以了

_1526486082_1327522151_1539943212_1526486082_1327522151.png

  • 当然 研究人员 花了很长时间才想出这行代码的,我不是说这是一个简单的问题 但事实上 如果你 使用正确的编程环境 许多学习 算法是用很短的代码写出来的
  • 所以这也是为什么在 这门课中我们要 使用Octave的编程环境
  • Octave是一个免费的 开放源码的软件 使用Octave或Matlab这类的工具 许多学习算法 都可以用几行代码就可以实现 在后续课程中 我会教你如何使用Octave 你会学到 如何在Octave中实现这些算法 或者 如果你有Matlab 你可以用它 事实上 在硅谷 很多的机器学习算法 我们都是先用Octave 写一个程序原型 因为在Octave中实现这些 学习算法的速度快得让你无法想象
  • 在这里 每一个函数 例如 SVD 意思是奇异值分解 但这其实是解线性方程 的一个惯例 它被内置在Octave软件中了
  • 如果你试图 在C + +或Java中做这个 将需要写N多代码 并且还要连接复杂的C + +或Java库 所以 你可以在C++或 Java或Python中 实现这个算法 只是会 更加复杂而已
  • 如果你使用Octave的话 会学的更快 并且如果你用 Octave作为你的学习工具 和开发原型的工具 你的学习和开发过程 会变得更快
  • 而事实上在硅谷 很多人会这样做 他们会先用Octave 来实现这样一个学习算法原型 只有在确定 这个算法可以工作后 才开始迁移到 C++ Java或其它编译环境 事实证明 这样做 实现的算法 比你一开始就用C++ 实现的算法要快多了
  • 我们谈到了无监督学习 它是一种学习机制 你给算法大量的数据 要求它找出数据中 蕴含的类型结构 以下的四个例子中 哪一个 您认为是 无监督学习算法 而不是监督学习问题

_1526486136_2099457706_1539943241_1526486136_2099457706.png

* 恩 没忘记垃圾邮件文件夹问题吧? 如果你已经标记过数据 那么就有垃圾邮件和 非垃圾邮件的区别 我们会将此视为一个监督学习问题
* 新闻故事的例子 正是我们在本课中讲到的 谷歌新闻的例子 我们介绍了你可以如何使用 聚类算法这些文章聚合在一起 所以这是无监督学习问题
* 市场细分的例子 我之前有说过 这也是一个无监督学习问题 因为我是要 拿到数据 然后要求 它自动发现细分市场 
* 最后一个例子 糖尿病 这实际上就像我们 上节课讲到的乳腺癌的例子 只不过这里不是 好的或坏的癌细胞 良性或恶性肿瘤我们 现在是有糖尿病或 没有糖尿病 所以这是 有监督的学习问题 像处理那个乳腺癌的问题一样 我们会把它作为一个 有监督的学习问题来处理

小小的总结

  • 无监督的学习使我们能够很少或根本不知道我们的结果应该是什么样子。 我们可以从数据中推导出结构,我们不一定知道变量的影响。
  • 我们可以通过基于数据中变量之间的关系对数据进行聚类来推导出这种结构。
  • 在无监督学习的基础上,没有基于预测结果的反馈。
  • 例:
    • 聚类(Clustering):搜集一百万个不同的基因,并找到一种方法,将这些基因自动分组,这些基因组通过不同的变量(例如寿命,位置,角色等)相似或相关。
    • 非聚类(Non-clustering):“鸡尾酒会算法”,可以让你在混乱的环境中找到结构。 (即在鸡尾酒会上从声音网格中识别个别的声音和音乐)。

   转载规则


《零:机器学习介绍》 冯文华 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
第一章: Model and Cost Function 第一章: Model and Cost Function
第一章: Model and Cost FunctionModel Representation:模型表示 我们的第一个学习算法是线性回归算法,了解监督学习过程完整的流程 例子 这个例子是预测住房价格的 我们要使用一个数据集 数据集包含俄
本篇 
零:机器学习介绍 零:机器学习介绍
视频地址 定义定义1给予计算机学习能力的领域。 Samuel的定义可以回溯到50年代,他编写了一个西洋棋程序。 这程序神奇之处在于,编程者自己并不是个下棋高手。 但因为他太菜了,于是就通过编程, 让西洋棋程序自己跟自己下了上万盘棋。通过
  目录