标签:
参考链接:
mlpy - Machine Learning Python
FANN - Fast Artificial Neural Network Library
Weka 3: Data Mining Software in Java
知乎:
What is machine learning? You probably use it dozens of times
a day without even knowing it. Each time you do a web search on Google or
Bing, that works so well because their machine learning software
has figured out how to rank what pages. When Facebook or Apple‘s photo application
recognizes your friends in your pictures, that‘s also machine learning. Each time you read your email and a spam filter saves you from having
to wade through tons of spam, again, that‘s because your computer has learned
to distinguish spam from non-spam email. So, that‘s machine learning. There‘s a science of getting computers to
learn without being explicitly programmed. One of the research projects that I‘m
working on is getting robots to tidy up the house. How do you go about doing that? Well what you can do is have the robot
watch you demonstrate the task and learn from that. The robot can then watch what objects
you pick up and where to put them and try to do the same thing
even when you aren‘t there. For me, one of the reasons I‘m
excited about this is the AI, or artificial intelligence problem. Building truly intelligent machines, we can do just about anything that you or
I can do. Many scientists think the best way to
make progress on this is through learning algorithms called neural networks,
which mimic how the human brain works, and I‘ll teach you about that, too. In this class,
you learn about machine learning and get to implement them yourself. I hope you sign up on our website and
join us.
We strongly encourage students to form study groups, and discuss the lecture videos (including in-video questions). We also encourage you to get together with friends to watch the videos together as a group. However, the answers that you submit for the review questions should be your own work. For the programming exercises, you are welcome to discuss them with other students, discuss specific algorithms, properties of algorithms, etc.; we ask only that you not look at any source code written by a different student, nor show your solution code to other students.
Learner Question/Comment: "Here is the code I have so far, but it fails the grader. Please help me fix it."
Why Delete?: The reason is that if there is a simple fix provided by a student, a quick copy and paste with a small edit will provide credit without individual effort.
Learner Question: A student substitutes words for the math operators, but includes the variable names (or substitutes the equivalent greek letters (θ for ‘theta‘, etc). This student also provides a sentence-by-sentence, line by line, description of exactly what their code implements. "The first line of my script has the equation "hypothesis equals theta times X", but I get the following error message...".
Why Delete?: This should be deleted. “Spelling out” the code in English is the same as using the regular code.
Learner Question: How do I subset a matrix to eliminate the intercept?
Mentor Response: This probably would be okay, especially if the person posting makes an effort to not use familiar variable names, or to use a context which has nothing to do with the contexts in the assignments.
It is clearly ok to show examples of Octave code to demonstrate a technique. Even if the technique itself is directly applicable to a programming problem at hand. As long as what is typed cannot be "cut and pasted" into the program at hand.
E.g. how do I set column 1 of a matrix to zero? Try this in your Octave work area:
>> A = magic(3)
>> A(:,1) = 0
The above is always acceptable (in my understanding). Demonstrating techniques and learning the language/syntax are important Forum activities.
0:00
欢迎来到这门关于机器学习的免费网络课程
机器学习是近年来最激动人心的技术之一 在这门课中 你不仅可以了解机器学习的原理 更有机会进行实践操作 并且亲自运用所学的算法
在生活中 每天你都可能在不知不觉中使用了各种各样的机器学习算法 比如 当你每一次使用像诸如谷歌 (Google)或必应 (Bing) 的搜索引擎时 它们运作得如此之好的原因之一便是 由Google或微软实现的一种学习算法可以“学会”如何对网页进行排名 每当你使用脸书 (Facebook)或苹果 (Apple) 的照片处理应用时 它们都能自动识别出你朋友的照片 这也是机器学习的一种 每当你阅读电子邮件时 你的垃圾邮件过滤器帮你免受大量垃圾邮件的困扰 这也是通过一种学习算法实现的
还有一个让我兴奋的理由 是一个关于人工智能的梦想 有朝一日 我们能创造出像你我一样聪明的机器 尽管我们离这个目标仍有很长的距离 但许多的人工智能专家相信 实现这一目标最好的途径是通过学习算法 来模拟人类大脑的学习方式 关于这点 我也会在这门课程中有所提及
在这门课中你将会掌握机器学习的前沿原理 但是 仅仅了解其中的算法和数学是不够的 尤其是如果你并不知道如何将所学的理论知识用到你的实际问题上时 因此 我们也将花费大量时间来让大家进行编程练习 帮助你实现所学的算法 并体验到它们究竟是怎么运作的
话说 为什么机器学习在当今如此流行呢? 机器学习发源于人工智能领域 我们希望能够创造出具有智慧的机器 我们通过编程来让机器完成一些基础的工作 比如如何找到从A到B的最短路径 但在大多数情况下 我们并不知道如何显式地编写人工智能程序 来做一些更有趣的任务 比如网页搜索 标记照片和拦截垃圾邮件等 人们意识到唯一能够达成这些目标的方法 就是让机器自己学会如何去做 因而 机器学习已经发展成为计算机的一项新能力 并且与工业界和基础科学界有着紧密的联系
身处机器学习领域 我常常会在短短一周中与形形色色的人打交道 如直升机飞行员、生物学家、还有许多计算机系统专家 比如我在斯坦福的同事们 同时平均每周我还会数次收到来自硅谷的业界人士的email 咨询我是否有兴趣将机器学习算法应用到他们所遇到的实际问题中 以上的例子都彰显了机器学习所能处理的问题范围之广
在硅谷 机器学习引导着大量的课题 如自主机器人、计算生物学等 机器学习的实例还有很多 比如数据库挖掘 机器学习变得如此流行的原因之一 便是网络和自动化算法的爆炸性增长 这意味着我们掌握了比以往多得多的数据集 举例来说
几乎工程界的所有领域 都在使用机器学习算法来分析日益增长的海量数据集 有些机器应用我们并不能够通过手工编程来实现 比如说 我个人对自动直升机有着许多年的研究 想要写出一个能让直升机自主飞行的程序几乎是不可能的任务 唯一可行的解决方案就是让一台计算机能够自主地学会如何让直升机飞行
4:37
再比如手写识别 如今将大量的邮件 按地址分类寄送到全美甚至全球的代价大大降低 其中重要的理由之一便是每当你写下这样一封信时 一个机器学习的算法 已经学会如何读懂你的笔迹并自动地 将你的信件发往它的目的地 所以邮寄跨越上万里的信件的费用也很低 你也许曾经接触过自然语言处理和计算机视觉 事实上 这些领域都是试图通过人工智能来 理解人类的语言和图像 如今大多数的自然语言处理和计算机视觉都是对机器学习的一种应用
机器学习算法也在用户自定制化程序(self-customizing program)中有着广泛的应用 每当你使用亚马逊 Netflix或iTunes Genius的服务时 都会收到它们为你量身推荐的电影或产品 这就是通过学习算法来实现的 可以相信 这些应用都有着上千万的用户 而针对这些海量的用户 编写千万个不同的程序显然是不可能的 唯一有效的解决方案就是开发出能够自我学习 定制出符合你喜好的并据此进行推荐的软件 最后 机器学习算法已经被应用于探究 人类的学习方式 并试图理解人类的大脑 我们也将会了解到研究者是如何运用机器学习的工具 来一步步实现人工智能的梦想
就在几个月前我的一位学生给我看了一篇文章 文中列举了当今12个最主要的IT技能 这些技术可以让信息技术行业的招聘官无法拒绝你 虽然这是一篇略显老旧的文章 但所有技能中最重要的便是机器学习 在斯坦福 向我咨询有没有即将毕业的研究机器学习学生的雇主 远远多于我们这儿每年毕业的机器学习的学生 因而我觉得对机器学习这一技能的需求仍有着巨大的缺口 而现在正是学习它的绝佳机会 我希望你们能在这门课中收获良多 在接下来的视频中 我将更正式地定义什么是机器学习 也会讨论机器学习主要面对的几类问题和相关算法 你也会学习一些主要的机器学习术语 并对不同的算法和其适用的场景 有初步的了解
0:00
?在本视频中,我将介绍一种也许是最常见的机器学习问题。 即监督学习。后面将给出监督学习更正式的定义, 现在最好以示例来说明什么是监督学习。 之后再给出正式的定义。假设你想预测房价(无比需要啊!), 之前,某学生已经从某地收集了数据集(不是中国的,囧) 其中一个数据集是这样的。 这是横坐标,即不同房子的面积,单位平方脚(^-^) 纵轴上是房价,单位 千美元。 根据给定数据,假设你朋友有栋房子,750平尺(70平米) 想知道这房子能卖多少,好卖掉。 那么,学习算法怎么帮你呢?学习算法可以: 绘出一条直线,让直线尽可能匹配到所有数据。 基于此,看上去,那个房子应该、可能、也许、大概 卖到15万美元(一平米两千刀!)。但这不是唯一的学习算法。 可能还有更好的。比如不用直线了, 可能平方函数会更好, 即二次多项式更符合数据集。如果你这样做, 预测结果就应该是20万刀(一平三千刀,涨价好快)。 后面我们会介绍到如何选择 是选择直线还是平方函数来拟合。 没有明确的选择,就不知哪个能给你的朋友 更好的卖房建议。只是这些每个都是很好的学习算法例子。 也是监督学习的例子。 术语监督学习,意指给出一个算法, 需要部分数据集已经有正确答案。比如给定房价数据集, 对于里面每个数据,算法都知道对应的正确房价, 即这房子实际卖出的价格。算法的结果就是 算出更多的正确价格,比如那个新房子, 你朋友想卖的那个。用更术语的方式来定义, 监督学习又叫回归问题,(应该是回归属于监督中的一种) 意指要预测一个连续值的输出,比如房价。 虽然从技术上,一般把房价记到美分单位。 所以实际还是个离散值,但通常把它看作实际数字, 是一个标量值,一个连续值的数,而术语回归, 意味着要预测这类连续值属性的种类。 另一个监督学习的例子,我和一些朋友 之前研究的领域。让我们来看医学记录, 并预测胸部肿瘤是恶性良性。 如果某人发现有胸部肿瘤,恶性肿瘤有害又危险, 良性肿瘤则是少害。 显然人们很关注这个。让我们看一个收集好的数据集, 假设在数据集中,横轴表示肿瘤的大小, 纵轴我打算圈上0或1,是或否, 即肿瘤是恶性的还是良性的。 所以如图所示,可以看到这个大小的肿瘤块 是良性的,还有这些大小的都是良性的。 不幸地是也看到一些恶性肿瘤,比如这些大小的肿瘤。 所以,有5个良性块,在这一块, 还有5个恶性的,它们纵轴值为1. 现在假设某人杯具地得胸部肿瘤了, 大小大概是这么大。 对应的机器学习问题就是,你能否估算出一个概率, 即肿瘤为恶或为良的概率? 专业地说,这是个分类问题。 分类是要预测一个离散值输出。 这里是0或1,恶性或良性。事实证明, 在分类问题中,有时会有超过两个的值, 输出的值可能超过两种。举个具体例子, 胸部肿瘤可能有三种类型,所以要预测离散值0,1,2,3 0就是良性肿瘤,没有癌症。 1 表示1号癌症,假设总共有三种癌症。 2 是2号癌症,3 就是3号癌症。 这同样是个分类问题,因为它的输出的离散值集合 分别对应于无癌,1号,2号,3号癌症 我再露一小手,在分类问题中,还有另一种作图方式 来描述数据。我画你猜。要用到些许不同的符号集合 来描绘数据。如果肿瘤大小作为唯一属性, 被用于预测恶性良性,可以把数据作图成这样。 使用不同的符号来表示良性和 恶性,即阴性和阳性。所以,不再统一画叉叉了, 改用圈圈来代表良性肿瘤,就像这样。 仍沿用X(叉叉)代表恶性肿瘤。希望你能明白。 我所做的就是,把在上面的数据, 映射下来。再用不同的符号, 圈和叉来分别代表良性和恶性。 在上例中,只使用了一个特征属性,即肿瘤块大小, 来预测肿瘤是恶性良性。在其它机器学习问题里, 有着不只一个的特征和属性。 例子,现在不只是知道肿瘤大小, 病人年龄和肿瘤大小都知道了。这种情况下, 数据集如表图所示,有些病人,年龄、肿瘤已知, 不同的病人,会有一点不一样, 肿瘤恶性,则用叉来代表。所以,假设 有一朋友得了肿瘤。肿瘤大小和年龄 落在此处。那么依据这个给定的数据集,学习算法 所做的就是画一条直线,分开 恶性肿瘤和良性肿瘤,所以学习算法会 画条直线,像这样,把两类肿瘤分开。 然后你就能判断你朋友的肿瘤是...了 如果它在那边,学习算法就说 你朋友的肿瘤在良性一边,因此更可能 是良性的。好,本例中,总共有两个特征, 即病人年龄和肿瘤大小。在别的ML问题中, 经常会用到更多特征,我朋友研究这个问题时, 通常使用这些特征:比如块的厚度,即胸部肿瘤的厚度 肿瘤细胞大小和形状的一致性, 等等。它表明, 最有趣的学习算法(本课中将学到) 能够处理,无穷多个特征。不是3到5个这么少。 在这张幻灯片中,我已经列举了总共5个不同的特征。 但对于一些学习问题, 真要用到的不只是三五个特征, 要用到无数多个特征,非常多的属性, 所以,你的学习算法要使用很多的属性 或特征、线索来进行预测。那么,你如何处理 无限多特征呢?甚至你如何存储无数的东西 进电脑里,又要避免内存不足? 事实上,等我们介绍一种叫支持向量机的算法时, 就知道存在一个简洁的数学方法,能让电脑处理无限多的特征。 想像下,我不是这边写两个特征, 右边写三个特征。而是,写一个无限长的特征表, 不停地写特征,似乎是个无限长的特征的表。 但是,我们也有能力设计一个算法来处理这个问题。 所以再从头复述一遍。本课中,我们介绍监督学习。 其基本思想是,监督学习中,对于数据集中的每个数据, 都有相应的正确答案,(训练集) 算法就是基于这些来做出预测。就像那个房价, 或肿瘤的性质。后面介绍了回归问题。 即通过回归来预测一个连续值输出。 我们还谈到了分类问题, 目标是预测离散值输出。下面是个小测验题目: 假设你有家公司,希望研究相应的学习算法去 解决两个问题。第一个问题,你有一堆货物的清单。 假设一些货物有几千件可卖, 你想预测出,你能在未来三个月卖出多少货物。 第二个问题,你有很多用户, 你打算写程序来检查每个用户的帐目。 对每个用户的帐目, 判断这个帐目是否被黑过(hacked or compromised)。 请问,这两个问题是分类问题,还是回归问题? 当视频暂停时,请用你的鼠标进行选择, 四选一,选择你认为正确的答案。 好,希望你刚才答对了。问题一是个回归问题 因为如果我有几千件货物, 可能只好把它当作一个实际的值,一个连续的值。 也把卖出的数量当作连续值。 第二个问题,则是分类问题,因为可以把 我想预测的一个值设为0,来表示账目没有被hacked 另一个设为1,表示已经被hacked。 就像乳癌例子中,0表示良性,1表示恶性。 所以这个值为0或1,取决于是否被hacked, 有算法能预测出是这两个离散值中的哪个。 因为只有少量的离散值,所以这个就是个分类问题。 这就是监督学习,下个视频将会介绍 无监督学习,学习算法的另一主要类型。
0:00
在这段视频中 我们要讲 第二种主要的机器学习问题 叫做无监督学习
0:06
在上一节视频中 我们已经讲过了监督学习 回想起上次的数据集 每个样本 都已经被标明为 正样本或者负样本 即良性或恶性肿瘤
0:20
因此 对于监督学习中的每一个样本 我们已经被清楚地告知了 什么是所谓的正确答案 即它们是良性还是恶性 在无监督学习中 我们用的数据会和监督学习里的看起来有些不一样 在无监督学习中 没有属性或标签这一概念 也就是说所有的数据 都是一样的 没有区别
0:39
所以在无监督学习中 我们只有一个数据集 没人告诉我们该怎么做 我们也不知道 每个数据点究竟是什么意思 相反 它只告诉我们 现在有一个数据集 你能在其中找到某种结构吗? 对于给定的数据集 无监督学习算法可能判定 该数据集包含两个不同的聚类 你看 这是第一个聚类
0:59
然后这是另一个聚类
1:01
你猜对了 无监督学习算法 会把这些数据分成两个不同的聚类
1:06
所以这就是所谓的聚类算法 实际上它被用在许多地方
1:11
我们来举一个聚类算法的栗子 Google 新闻的例子 如果你还没见过这个页面的话 你可以到这个URL news.google.com 去看看 谷歌新闻每天都在干什么呢? 他们每天会去收集 成千上万的 网络上的新闻 然后将他们分组 组成一个个新闻专题
1:30
比如 让我们来看看这里
1:33
这里的URL链接 连接着不同的 有关BP油井事故的报道
1:41
所以 让我们点击 这些URL中的一个 恩 让我们点一个 然后我们会来到这样一个网页 这是一篇来自华尔街日报的 有关……你懂的 有关BP油井泄漏事故的报道 标题为《BP杀死了Macondo》 Macondo 是个地名 就是那个漏油事故的地方 如果你从这个组里点击一个不同的URL
2:00
那么你可能会得到不同的新闻 这里是一则CNN的新闻 是一个有关BP石油泄漏的视频
2:07
如果你再点击第三个链接 又会出现不同的新闻 这边是英国卫报的报道 也是关于BP石油泄漏
2:16
所以 谷歌新闻所做的就是 去搜索成千上万条新闻 然后自动的将他们聚合在一起 因此 有关同一主题的 新闻被显示在一起 实际上 聚类算法和无监督学习算法 也可以被用于许多其他的问题
2:35
这里我们举个它在基因组学中的应用
2:38
下面是一个关于基因芯片的例子 基本的思想是 给定一组不同的个体 对于每个个体 检测它们是否拥有某个特定的基因 也就是说,你要去分析有多少基因显现出来了 因此 这些颜色 红 绿 灰 等等 它们 展示了这些不同的个体 是否拥有一个特定基因 的不同程度
3:02
然后你能做的就是 运行一个聚类算法 把不同的个体归入不同的类 或归为不同类型的人
3:10
这就是无监督学习 我们没有提前告知这个算法 这些是第一类的人 这些是第二类的人 这些是第三类的人等等 相反我们只是告诉算法 你看 这儿有一堆数据 我不知道这个数据是什么东东 我不知道里面都有些什么类型 叫什么名字 我甚至不知道都有哪些类型 但是 请问你可以自动的找到这些数据中的类型吗? 然后自动的 按得到的类型把这些个体分类 虽然事先我并不知道哪些类型 因为对于这些数据样本来说 我们没有给算法一个 正确答案 所以 这就是无监督学习
3:44
无监督学习或聚类算法在其他领域也有着大量的应用
3:48
它被用来组织大型的计算机集群
3:51
我有一些朋友在管理 大型数据中心 也就是 大型计算机集群 并试图 找出哪些机器趋向于 协同工作 如果你把这些机器放在一起 你就可以让你的数据中心更高效地工作
4:04
第二种应用是用于社交网络的分析
4:07
所以 如果可以得知 哪些朋友你用email联系的最多 或者知道你的Facebook好友 或者你Google+里的朋友 知道了这些之后 我们是否可以自动识别 哪些是很要好的朋友组 哪些仅仅是互相认识的朋友组
4:22
还有在市场分割中的应用
4:24
许多公司拥有庞大的客户信息数据库 那么 给你一个 客户数据集 你能否 自动找出不同的市场分割
4:33
并自动将你的客户分到不同的 细分市场中 从而有助于我在 不同的细分市场中 进行更有效的销售
4:44
这也是无监督学习 我们现在有 这些客户数据 但我们预先并不知道 有哪些细分市场 而且 对于我们数据集的某个客户 我们也不能预先知道 谁属于细分市场一 谁又属于细分市场二等等 但我们必须让这个算法自己去从数据中发现这一切
5:01
最后 事实上无监督学习也被用于 天文数据分析 通过这些聚类算法 我们发现了许多 惊人的、有趣的 以及实用的 关于星系是如何诞生的理论 所有这些都是聚类算法的例子 而聚类只是无监督学习的一种 现在让我来告诉你另一种 我先来介绍一下鸡尾酒宴问题
5:26
恩 我想你参加过鸡尾酒会的 是吧? 嗯 想象一下 有一个宴会 有一屋子的人 大家都坐在一起 而且在同时说话 有许多声音混杂在一起 因为每个人都是在同一时间说话的 在这种情况下你很难听清楚你面前的人说的话 因此 比如有这样一个场景 宴会上只有两个人
5:45
两个人 同时说话 恩 这是个很小的鸡尾酒宴会 我们准备好了两个麦克风 把它们放在房间里 然后 因为这两个麦克风距离这两个人 的距离是不同的 每个麦克风都记录下了 来自两个人的声音的不同组合
6:05
也许A的声音 在第一个麦克风里的声音会响一点 也许B的声音 在第二个麦克风里会比较响一些 因为2个麦克风 的位置相对于 2个说话者的位置是不同的 但每个麦克风都会录到 来自两个说话者的重叠部分的声音
6:23
这里有一个
6:26
来自一个研究员录下的两个说话者的声音 让我先放给你听第一个 这是第一个麦克风录到的录音: 一 (UNO) 二 (DOS) 三 (TRES) 四 (CUATRO) 五 (CINCO) 六 (SEIS) 七 (SIETE) 八 (ocho) 九 (NUEVE) 十 (Y DIEZ)
6:41
好吧 这大概不是什么有趣的酒会…… ……在这个酒会上 有两个人 各自从1数到10 但用的是两种不同语言 你刚才听到的是 第一个麦克风的录音 这里是第二个的:
6:57
一 (UNO) 二 (DOS) 三 (TRES) 四 (CUATRO) 五 (CINCO) 六 (SEIS) 七 (SIETE) 八 (ocho) 九 (NUEVE) 十 (Y DIEZ) 所以 我们能做的就是把 这两个录音输入 一种无监督学习算法中 称为“鸡尾酒会算法” 让这个算法 帮你找出其中蕴含的分类 然后这个算法 就会去听这些 录音 并且你知道 这听起??来像 两个音频录音 被叠加在一起 所以我们才能听到这样的效果 此外 这个算法 还会分离出 这两个被 叠加到一起的 音频源 事实上 这是我们的鸡尾酒会算法的第一个输出
7:39
一 二 三 四 五 六 七 八 九 十
7:47
所以我在一个录音中 分离出了英文声音
7:52
这是第二个输出 Uno dos tres quatro cinco seis siete ocho nueve y diez 听起来不错嘛
8:03
再举一个例子 这是另一个录音 也是在一个类似的场景下 这是第一个麦克风的录音: 一 二 三 四 五 六 七 八 九 十
8:16
OK 这个可怜的家伙从 鸡尾酒会回家了 他现在独自一人坐在屋里 对着录音机自言自语
8:23
这是第二个麦克风的录音
8:28
一 二 三 四 五 六 七 八 九 十
8:33
当你把这两个麦克风录音 送给与刚刚相同的算法处理 它所做的还是 告诉你 这听起来有 两种音频源 并且
8:42
算法说 这里是我找到的第一个音频源
8:47
一 二 三 四 五 六 七 八 九 十
8:54
恩 不是太完美 提取到了人声 但还有一点音乐没有剔除掉 这是算法的第二个输出
9:10
还好 在第二个输出中 它设法剔除掉了整个人声 只是清理了下音乐 剔除了从一到十的计数
9:18
所以 你可以看到 像这样的无监督学习算法 也许你想问 要实现这样的算法 很复杂吧? 看起来 为了 构建这个应用程序 做这个音频处理 似乎需要写好多代码啊 或者需要链接到 一堆处理音频的Java库 貌似需要一个 非常复杂的程序 分离出音频等
9:42
实际上 要实现你刚刚听到的效果 只需要一行代码就可以了 写在这里呢
9:50
当然 研究人员 花了很长时间才想出这行代码的 ^-^ 我不是说这是一个简单的问题 但事实上 如果你 使用正确的编程环境 许多学习 算法是用很短的代码写出来的
10:03
所以这也是为什么在 这门课中我们要 使用Octave的编程环境
10:08
Octave是一个免费的 开放源码的软件 使用Octave或Matlab这类的工具 许多学习算法 都可以用几行代码就可以实现 在后续课程中 我会教你如何使用Octave 你会学到 如何在Octave中实现这些算法 或者 如果你有Matlab 你可以用它
10:27
事实上 在硅谷 很多的机器学习算法 我们都是先用Octave 写一个程序原型 因为在Octave中实现这些 学习算法的速度快得让你无法想象
10:38
在这里 每一个函数 例如 SVD 意思是奇异值分解 但这其实是解线性方程 的一个惯例 它被内置在Octave软件中了
10:49
如果你试图 在C + +或Java中做这个 将需要写N多代码 并且还要连接复杂的C + +或Java库 所以 你可以在C++或 Java或Python中 实现这个算法 只是会 更加复杂而已
11:03
在教授机器学习 将近10年后 我得出的一个经验就是 如果你使用Octave的话 会学的更快 并且如果你用 Octave作为你的学习工具 和开发原型的工具 你的学习和开发过程 会变得更快
11:22
而事实上在硅谷 很多人会这样做 他们会先用Octave 来实现这样一个学习算法原型 只有在确定 这个算法可以工作后 才开始迁移到 C++ Java或其它编译环境 事实证明 这样做 实现的算法 比你一开始就用C++ 实现的算法要快多了
11:44
所以 我知道 作为一个老师 我不能老是念叨: “在这个问题上相信我“ 但对于 那些从来没有用过这种 类似Octave的编程环境的童鞋 我还是要请你 相信我这一次 我认为 你的时间 研发时间 是你最宝贵的资源之一
12:04
当见过很多的人这样做以后 我觉得如果你也这样做 作为一个机器学习的 研究者和开发者 你会更有效率 如果你学会先用Octave开发原型 而不是先用其他的编程语言来开发
12:17
最后 总结一下 这里有一个问题需要你来解答
12:24
我们谈到了无监督学习 它是一种学习机制 你给算法大量的数据 要求它找出数据中 蕴含的类型结构 以下的四个例子中 哪一个 您认为是 无监督学习算法 而不是监督学习问题 对于每一个选项 在左边的复选框 选中你认为 属于无监督学习的 选项 然后按一下右下角的按钮 提交你的答案 所以 当视频暂停时 请回答幻灯片上的这个问题
13:01
恩 没忘记垃圾邮件文件夹问题吧? 如果你已经标记过数据 那么就有垃圾邮件和 非垃圾邮件的区别 我们会将此视为一个监督学习问题
13:11
新闻故事的例子 正是我们在本课中讲到的 谷歌新闻的例子 我们介绍了你可以如何使用 聚类算法这些文章聚合在一起 所以这是无监督学习问题
13:23
市场细分的例子 我之前有说过 这也是一个无监督学习问题 因为我是要 拿到数据 然后要求 它自动发现细分市场
13:35
最后一个例子 糖尿病 这实际上就像我们 上节课讲到的乳腺癌的例子 只不过这里不是 好的或坏的癌细胞 良性或恶性肿瘤我们 现在是有糖尿病或 没有糖尿病 所以这是 有监督的学习问题 像处理那个乳腺癌的问题一样 我们会把它作为一个 有监督的学习问题来处理
13:58
好了 关于无监督学习问题 就讲这么多了 下一节课中我们 会涉及到更具体的学习算法 并开始讨论 这些算法是如何工作的 以及我们如何来实现它们 【教育无边界字幕组】翻译:碳老师 校对:linuxfish 审核:所罗门捷列夫
0:02
我们的第一个学习算法是线性回归算法 在这段视频中
0:06
你会看到这个算法的概况 更重要的是你将会了解 监督学习过程完整的流程 让我们通过一个例子来开始 这个例子是预测住房价格的 我们要使用一个数据集 数据集包含俄勒冈州波特兰市的住房价格 在这里 我要根据不同房屋尺寸所售出的价格 画出我的数据集 比方说 我们来看这个数据集 你有一个朋友正想出售自己的房子 如果你朋友的房子是1250平方尺大小 你要告诉他们 这房子能卖多少钱 那么 你可以做的一件事就是 构建一个模型 也许是条直线 从这个数据模型上来看 也许你可以告诉你的朋友 他能以大约220000(美元)左右的价格 卖掉这个房子 那么这就是监督学习算法的一个例子 它被称作监督学习是因为对于每个数据来说 我们给出了 “正确的答案” 即告诉我们 根据我们的数据来说 房子实际的价格是多少 而且 更具体来说 这是一个回归问题 回归一词指的是我们根据之前的数据预测出一个准确的输出值 对于这个例子就是价格 同时 还有另一种最常见的监督学习方式 叫做分类问题 当我们想要预测离散的输出值 例如 如果我们正在寻找 癌症肿瘤并想要确定 肿瘤是良性的还是恶性的 这就是0/1离散输出的问题 更进一步来说 在监督学习中我们有一个数据集 这个数据集被称训练集 因此对于房价的例子 我们有一个训练集 包含不同的房屋价格 我们的任务就是从这个数据中学习预测房屋价格 现在我们给出这门课中经常使用的一些符号定义 我们要定义颇多符号 不过没关系 现在你记不住所有的符号也没关系 随着课程的进展 你会发现记住这些符号会很有用 我将在整个课程中用小写的m 来表示训练样本的数目 因此 在这个数据集中 如果表中有47行 那么我们就有47组训练样本 m就等于47 让我用小写字母x来表示输入变量 往往也被称为特征量 这就是用x表示输入的特征 并且我们将用y来表示输出变量或者目标变量 也就是我的预测结果 那么这就是第二列 在这里 我要使用(x, y)来表示一个训练样本 所以 在这个表格中的单独的一行对应于一个训??练样本 为了表示某个训练样本 我将使用x上标(i)与y上标(i)来表示
3:25
并且用这个表示第i个训练样本 所以这个上标 i 看这里 这不是求幂运算 这个(x(i), y(i)) 括号里的上标i 只是一个索引 表示我的训练集里的第i行 这里不是x的i和y的i次方 仅仅是指(x(i), y(i))是在此表中的第 i 行 举个例子 x(1) 指的是 第一个训练集里值为2104的输入值 这个就是第一行里的x x(2) 等于1416吧? 这是第二个x y(1) 等于460 这是我第一个训练集样本的y值 这就是(1)所代表的含义 像之前一样 我会问你一个问题 需要几秒的时间 检查一下你的理解程度 在这个视频片段中 有时会有视频选择题弹出 当它弹出的时候 请使用鼠标来选择你认为正确的答案 这就是一个监督学习算法的工作方式 我们可以看到这里有我们的训练集里房屋价格 我们把它喂给我们的学习算法 这就是学习算法的工作了 然后输出一个函数 按照惯例 通常表示为小写h h代表hypothesis(假设) h表示一个函数 输入是房屋尺寸大小 就像你朋友想出售的房屋 因此 h 根据输入的 x 值来得出 y 值 y值对应房子的价格 因此 h是一个从x到y的函数映射 人们经常问我为什么这个函数被称作假设(hypothesis) 你们中有些人可能知道hypothesis的意思 从字典或者其它什么方式可以查到 其实在机器学习中 这是一个在早期被用于机器学习的名称 它有点绕口 对这类函数来说 这可能不是一个很恰当的名字 对表示从房屋的大小到价格的函数映射 我认为这个词"hypothesis" 可能不是最好的名称 但是这是人们在机器学习中使用的标准术语 所以不用太纠结人们为什么这么叫它 当设计学习算法的时候 我们接下来需要去思考的是 怎样得到这个假设h 对于这一点在接下来的几个视频中 我将选择最初的使用规则 h代表hypothesis 我们将会这么写 hθ(x)=θ0+θ1*x 为了方便 有时非书面形式也可以这么写 hθ(x) 我就写成h(x) 这是缩写方式 但一般来说我会保留这个下标θ 从这个图片中 所有这一切意味着我们要预测一个关于x的 线性函数 y 对吧? 所以这就是数据集和函数的作用 用来预测 这里是y关于x的线性函数 hθ(x)=θ0+θ1*x 那么为什么是一个线性函数呢? 有时候 我们会有更复杂的函数 也许是非线性函数 但是 由于线性方程是简单的形式 我们将先从线性方程的例子入手 当然 最终我们将会建立更复杂的模型 以及更复杂的学习算法 好吧 让我们也给这模型 起一个名字 这个模型被称为线性回归(linear regression)模型 另外 这实际上是关于单个变量的线性回归 这个变量就是x 根据x来预测所有的价格函数 同时 对于这种模型有另外一个名称 称作单变量线性回归 单变量是对一个变量的一种 特别的表述方式 总而言之 这就是线性回归 在接下来的视频中 我们将开始讨论如何去实现这种模型 【教育无边界字幕组】翻译:Naplessss 校对:小白_远游 审核:所罗门捷列夫
标签:
原文地址:http://www.cnblogs.com/leezx/p/5619914.html