机器学习 Octave开发原型 速度远快于C 或 Java或Python实现这个算法
在这段视频中 我们要讲 第二种主要的机器学习问题 叫做无监督学习
从 ::6 开始播放视频并学习脚本0:06
在上一节视频中 我们已经讲过了监督学习 回想起上次的数据集 每个样本 都已经被标明为 正样本或者负样本 即良性或恶性肿瘤
从 ::20 开始播放视频并学习脚本0:20
因此 对于监督学习中的每一个样本 我们已经被清楚地告知了 什么是所谓的正确答案 即它们是良性还是恶性 在无监督学习中 我们用的数据会和监督学习里的看起来有些不一样 在无监督学习中 没有属性或标签这一概念 也就是说所有的数据 都是一样的 没有区别
从 ::39 开始播放视频并学习脚本0:39
所以在无监督学习中 我们只有一个数据集 没人告诉我们该怎么做 我们也不知道 每个数据点究竟是什么意思 相反 它只告诉我们 现在有一个数据集 你能在其中找到某种结构吗? 对于给定的数据集 无监督学习算法可能判定 该数据集包含两个不同的聚类 你看 这是第一个聚类
从 ::59 开始播放视频并学习脚本0:59
然后这是另一个聚类
从 :1:1 开始播放视频并学习脚本1:01
你猜对了 无监督学习算法 会把这些数据分成两个不同的聚类
从 :1:6 开始播放视频并学习脚本1:06
所以这就是所谓的聚类算法 实际上它被用在许多地方
从 :1:11 开始播放视频并学习脚本1:11
我们来举一个聚类算法的栗子 Google 新闻的例子 如果你还没见过这个页面的话 你可以到这个URL news.google.com 去看看 谷歌新闻每天都在干什么呢? 他们每天会去收集 成千上万的 网络上的新闻 然后将他们分组 组成一个个新闻专题
从 :1:30 开始播放视频并学习脚本1:30
比如 让我们来看看这里
从 :1:33 开始播放视频并学习脚本1:33
这里的URL链接 连接着不同的 有关BP油井事故的报道
从 :1:41 开始播放视频并学习脚本1:41
所以 让我们点击 这些URL中的一个 恩 让我们点一个 然后我们会来到这样一个网页 这是一篇来自华尔街日报的 有关……你懂的 有关BP油井泄漏事故的报道 标题为《BP杀死了Macondo》 Macondo 是个地名 就是那个漏油事故的地方 如果你从这个组里点击一个不同的URL
从 :2: 开始播放视频并学习脚本2:00
那么你可能会得到不同的新闻 这里是一则CNN的新闻 是一个有关BP石油泄漏的视频
从 :2:7 开始播放视频并学习脚本2:07
如果你再点击第三个链接 又会出现不同的新闻 这边是英国卫报的报道 也是关于BP石油泄漏
从 :2:16 开始播放视频并学习脚本2:16
所以 谷歌新闻所做的就是 去搜索成千上万条新闻 然后自动的将他们聚合在一起 因此 有关同一主题的 新闻被显示在一起 实际上 聚类算法和无监督学习算法 也可以被用于许多其他的问题
从 :2:35 开始播放视频并学习脚本2:35
这里我们举个它在基因组学中的应用
从 :2:38 开始播放视频并学习脚本2:38
下面是一个关于基因芯片的例子 基本的思想是 给定一组不同的个体 对于每个个体 检测它们是否拥有某个特定的基因 也就是说,你要去分析有多少基因显现出来了 因此 这些颜色 红 绿 灰 等等 它们 展示了这些不同的个体 是否拥有一个特定基因 的不同程度
从 :3:2 开始播放视频并学习脚本3:02
然后你能做的就是 运行一个聚类算法 把不同的个体归入不同的类 或归为不同类型的人
从 :3:10 开始播放视频并学习脚本3:10
这就是无监督学习 我们没有提前告知这个算法 这些是第一类的人 这些是第二类的人 这些是第三类的人等等 相反我们只是告诉算法 你看 这儿有一堆数据 我不知道这个数据是什么东东 我不知道里面都有些什么类型 叫什么名字 我甚至不知道都有哪些类型 但是 请问你可以自动的找到这些数据中的类型吗? 然后自动的 按得到的类型把这些个体分类 虽然事先我并不知道哪些类型 因为对于这些数据样本来说 我们没有给算法一个 正确答案 所以 这就是无监督学习
从 :3:44 开始播放视频并学习脚本3:44
无监督学习或聚类算法在其他领域也有着大量的应用
从 :3:48 开始播放视频并学习脚本3:48
它被用来组织大型的计算机集群
从 :3:51 开始播放视频并学习脚本3:51
我有一些朋友在管理 大型数据中心 也就是 大型计算机集群 并试图 找出哪些机器趋向于 协同工作 如果你把这些机器放在一起 你就可以让你的数据中心更高效地工作
从 :4:4 开始播放视频并学习脚本4:04
第二种应用是用于社交网络的分析
从 :4:7 开始播放视频并学习脚本4:07
所以 如果可以得知 哪些朋友你用email联系的最多 或者知道你的Facebook好友 或者你Google 里的朋友 知道了这些之后 我们是否可以自动识别 哪些是很要好的朋友组 哪些仅仅是互相认识的朋友组
从 :4:22 开始播放视频并学习脚本4:22
还有在市场分割中的应用
从 :4:24 开始播放视频并学习脚本4:24
许多公司拥有庞大的客户信息数据库 那么 给你一个 客户数据集 你能否 自动找出不同的市场分割
从 :4:33 开始播放视频并学习脚本4:33
并自动将你的客户分到不同的 细分市场中 从而有助于我在 不同的细分市场中 进行更有效的销售
从 :4:44 开始播放视频并学习脚本4:44
这也是无监督学习 我们现在有 这些客户数据 但我们预先并不知道 有哪些细分市场 而且 对于我们数据集的某个客户 我们也不能预先知道 谁属于细分市场一 谁又属于细分市场二等等 但我们必须让这个算法自己去从数据中发现这一切
从 :5:1 开始播放视频并学习脚本5:01
最后 事实上无监督学习也被用于 天文数据分析 通过这些聚类算法 我们发现了许多 惊人的、有趣的 以及实用的 关于星系是如何诞生的理论 所有这些都是聚类算法的例子 而聚类只是无监督学习的一种 现在让我来告诉你另一种 我先来介绍一下鸡尾酒宴问题
从 :5:26 开始播放视频并学习脚本5:26
恩 我想你参加过鸡尾酒会的 是吧? 嗯 想象一下 有一个宴会 有一屋子的人 大家都坐在一起 而且在同时说话 有许多声音混杂在一起 因为每个人都是在同一时间说话的 在这种情况下你很难听清楚你面前的人说的话 因此 比如有这样一个场景 宴会上只有两个人
从 :5:45 开始播放视频并学习脚本5:45
两个人 同时说话 恩 这是个很小的鸡尾酒宴会 我们准备好了两个麦克风 把它们放在房间里 然后 因为这两个麦克风距离这两个人 的距离是不同的 每个麦克风都记录下了 来自两个人的声音的不同组合
从 :6:5 开始播放视频并学习脚本6:05
也许A的声音 在第一个麦克风里的声音会响一点 也许B的声音 在第二个麦克风里会比较响一些 因为2个麦克风 的位置相对于 2个说话者的位置是不同的 但每个麦克风都会录到 来自两个说话者的重叠部分的声音
从 :6:23 开始播放视频并学习脚本6:23
这里有一个
从 :6:26 开始播放视频并学习脚本6:26
来自一个研究员录下的两个说话者的声音 让我先放给你听第一个 这是第一个麦克风录到的录音: 一 (UNO) 二 (DOS) 三 (TRES) 四 (CUATRO) 五 (CINCO) 六 (SEIS) 七 (SIETE) 八 (ocho) 九 (NUEVE) 十 (Y DIEZ)
从 :6:41 开始播放视频并学习脚本6:41
好吧 这大概不是什么有趣的酒会…… ……在这个酒会上 有两个人 各自从1数到10 但用的是两种不同语言 你刚才听到的是 第一个麦克风的录音 这里是第二个的:
从 :6:57 开始播放视频并学习脚本6:57
一 (UNO) 二 (DOS) 三 (TRES) 四 (CUATRO) 五 (CINCO) 六 (SEIS) 七 (SIETE) 八 (ocho) 九 (NUEVE) 十 (Y DIEZ) 所以 我们能做的就是把 这两个录音输入 一种无监督学习算法中 称为“鸡尾酒会算法” 让这个算法 帮你找出其中蕴含的分类 然后这个算法 就会去听这些 录音 并且你知道 这听起来像 两个音频录音 被叠加在一起 所以我们才能听到这样的效果 此外 这个算法 还会分离出 这两个被 叠加到一起的 音频源 事实上 这是我们的鸡尾酒会算法的第一个输出
从 :7:39 开始播放视频并学习脚本7:39
一 二 三 四 五 六 七 八 九 十
从 :7:47 开始播放视频并学习脚本7:47
所以我在一个录音中 分离出了英文声音
从 :7:52 开始播放视频并学习脚本7:52
这是第二个输出 Uno dos tres quatro cinco seis siete ocho nueve y diez 听起来不错嘛
从 :8:3 开始播放视频并学习脚本8:03
再举一个例子 这是另一个录音 也是在一个类似的场景下 这是第一个麦克风的录音: 一 二 三 四 五 六 七 八 九 十
从 :8:16 开始播放视频并学习脚本8:16
OK 这个可怜的家伙从 鸡尾酒会回家了 他现在独自一人坐在屋里 对着录音机自言自语
从 :8:23 开始播放视频并学习脚本8:23
这是第二个麦克风的录音
从 :8:28 开始播放视频并学习脚本8:28
一 二 三 四 五 六 七 八 九 十
从 :8:33 开始播放视频并学习脚本8:33
当你把这两个麦克风录音 送给与刚刚相同的算法处理 它所做的还是 告诉你 这听起来有 两种音频源 并且
从 :8:42 开始播放视频并学习脚本8:42
算法说 这里是我找到的第一个音频源
从 :8:47 开始播放视频并学习脚本8:47
一 二 三 四 五 六 七 八 九 十
从 :8:54 开始播放视频并学习脚本8:54
恩 不是太完美 提取到了人声 但还有一点音乐没有剔除掉 这是算法的第二个输出
从 :9:10 开始播放视频并学习脚本9:10
还好 在第二个输出中 它设法剔除掉了整个人声 只是清理了下音乐 剔除了从一到十的计数
从 :9:18 开始播放视频并学习脚本9:18
所以 你可以看到 像这样的无监督学习算法 也许你想问 要实现这样的算法 很复杂吧? 看起来 为了 构建这个应用程序 做这个音频处理 似乎需要写好多代码啊 或者需要链接到 一堆处理音频的Java库 貌似需要一个 非常复杂的程序 分离出音频等
从 :9:42 开始播放视频并学习脚本9:42
实际上 要实现你刚刚听到的效果 只需要一行代码就可以了 写在这里呢
从 :9:50 开始播放视频并学习脚本9:50
当然 研究人员 花了很长时间才想出这行代码的 - 我不是说这是一个简单的问题 但事实上 如果你 使用正确的编程环境 许多学习 算法是用很短的代码写出来的
从 :10:3 开始播放视频并学习脚本10:03
所以这也是为什么在 这门课中我们要 使用Octave的编程环境
从 :10:8 开始播放视频并学习脚本10:08
Octave是一个免费的 开放源码的软件 使用Octave或Matlab这类的工具 许多学习算法 都可以用几行代码就可以实现 在后续课程中 我会教你如何使用Octave 你会学到 如何在Octave中实现这些算法 或者 如果你有Matlab 你可以用它
从 :10:27 开始播放视频并学习脚本10:27
事实上 在硅谷 很多的机器学习算法 我们都是先用Octave 写一个程序原型 因为在Octave中实现这些 学习算法的速度快得让你无法想象
从 :10:38 开始播放视频并学习脚本10:38
在这里 每一个函数 例如 SVD 意思是奇异值分解 但这其实是解线性方程 的一个惯例 它被内置在Octave软件中了
从 :10:49 开始播放视频并学习脚本10:49
如果你试图 在C 或Java中做这个 将需要写N多代码 并且还要连接复杂的C 或Java库 所以 你可以在C 或 Java或Python中 实现这个算法 只是会 更加复杂而已
从 :11:3 开始播放视频并学习脚本11:03
在教授机器学习 将近10年后 我得出的一个经验就是 如果你使用Octave的话 会学的更快 并且如果你用 Octave作为你的学习工具 和开发原型的工具 你的学习和开发过程 会变得更快
从 :11:22 开始播放视频并学习脚本11:22
而事实上在硅谷 很多人会这样做 他们会先用Octave 来实现这样一个学习算法原型 只有在确定 这个算法可以工作后 才开始迁移到 C Java或其它编译环境 事实证明 这样做 实现的算法 比你一开始就用C 实现的算法要快多了
从 :11:44 开始播放视频并学习脚本11:44
所以 我知道 作为一个老师 我不能老是念叨: “在这个问题上相信我“ 但对于 那些从来没有用过这种 类似Octave的编程环境的童鞋 我还是要请你 相信我这一次 我认为 你的时间 研发时间 是你最宝贵的资源之一
从 :12:4 开始播放视频并学习脚本12:04
当见过很多的人这样做以后 我觉得如果你也这样做 作为一个机器学习的 研究者和开发者 你会更有效率 如果你学会先用Octave开发原型 而不是先用其他的编程语言来开发
从 :12:17 开始播放视频并学习脚本12:17
最后 总结一下 这里有一个问题需要你来解答
从 :12:24 开始播放视频并学习脚本12:24
我们谈到了无监督学习 它是一种学习机制 你给算法大量的数据 要求它找出数据中 蕴含的类型结构 以下的四个例子中 哪一个 您认为是 无监督学习算法 而不是监督学习问题 对于每一个选项 在左边的复选框 选中你认为 属于无监督学习的 选项 然后按一下右下角的按钮 提交你的答案 所以 当视频暂停时 请回答幻灯片上的这个问题
从 :13:1 开始播放视频并学习脚本13:01
恩 没忘记垃圾邮件文件夹问题吧? 如果你已经标记过数据 那么就有垃圾邮件和 非垃圾邮件的区别 我们会将此视为一个监督学习问题
从 :13:11 开始播放视频并学习脚本13:11
新闻故事的例子 正是我们在本课中讲到的 谷歌新闻的例子 我们介绍了你可以如何使用 聚类算法这些文章聚合在一起 所以这是无监督学习问题
从 :13:23 开始播放视频并学习脚本13:23
市场细分的例子 我之前有说过 这也是一个无监督学习问题 因为我是要 拿到数据 然后要求 它自动发现细分市场
从 :13:35 开始播放视频并学习脚本13:35
最后一个例子 糖尿病 这实际上就像我们 上节课讲到的乳腺癌的例子 只不过这里不是 好的或坏的癌细胞 良性或恶性肿瘤我们 现在是有糖尿病或 没有糖尿病 所以这是 有监督的学习问题 像处理那个乳腺癌的问题一样 我们会把它作为一个 有监督的学习问题来处理
从 :13:58 开始播放视频并学习脚本13:58
好了 关于无监督学习问题 就讲这么多了 下一节课中我们 会涉及到更具体的学习算法 并开始讨论 这些算法是如何工作的 以及我们如何来实现它们 【教育无边界字幕组】翻译:碳老师 校对:linuxfish 审核:所罗门捷列夫