通过身边小事解释机器学习是什么?
2015-06-08 19:15
253 查看
通过身边小事解释机器学习是什么
一个给不知道机器学习是什么东西的人讲的一个挺不错的例子,方法。今天从quora上看了一个问题:如何给不是CS的学生,给不知道机器学习和数据挖掘的学生,讲明白什么是机器学习和数据挖掘。
其中有个答案很不错,拿买芒果的例子来给大家解释。老师们也应该多用用类似的一些例子,启发下学生的思考。
===
买芒果
有一天,你想吃芒果了,你就到地边的小摊上去买芒果,小摊上有好多芒果啊,你可以自己用手挑芒果。跳完之后,摊主会给你称称,多少斤?根据重量来付钱。买芒果嘛,你只要不是重口味或者口味独特,还是选择最甜的,熟透了的芒果。因为你是根据重量来付钱的,又不是根据甜的程度或者熟了的程度,虽然摊主有时候会把好的芒果挑出一堆来单独涨价,但是这里这个摊主没这么做。
你奶奶曾经告诉你说,买芒果要买金黄色的,黄橙橙黄灿灿的,这样的最甜,不要买那些浅黄色的,那些还没熟。
好吧,这样你就有了一点经验,虽然这点经验是别人直接教给你的:买芒果,就买金黄色的。你在小摊上,挑了些金黄色的,过磅付钱,回家。这事就这么完了?别急,下文。
生活没那么简单
你回家,高高兴兴吃芒果,但是你发现,并不是每个芒果都那么甜,有部分不甜啊。唉,老奶奶的经验还是不足啊,虽然吃的盐比我走的路多,但是只通过颜色判断芒果甜不甜,不是很靠谱。你回忆回忆看看到底什么样子的芒果甜?好像是又大又金黄色的比较甜,那些小点的金黄色的芒果,得有一半是不甜的。(买了100个金黄色的芒果,有50个大的,都是甜的;另外有50个小的,其中有25个是不甜的。)
嗯,你总算总结出来一条经验规则了:大的金黄色的是最甜的,哈哈。你又高高兴兴的 去买芒果。Shit,你熟悉的、你信得过的那个摊主走了。所以你得 换一个小摊买芒果了,但是新的摊主的芒果是产自不同的地方,你之前总结的经验可能不行了,你不知道能不能迁移过去(transfer learning),于是你从头再开始尝试吧,发现这里小的,浅黄色的是最甜的!
一天,你表妹来找你玩,想吃芒果,但是她不在乎甜不甜,她喜欢吃多汁的。唉,以前的经验又不顶用了。你只能进行新的一轮实验,目标就是多汁的芒果(优化目标变了)。你又总结出,越软的越多汁。
你出国了读PhD,这里的芒果跟你家乡的差不太大了,这里绿色的最好吃。PhD毕 业后,你结婚了,老婆不喜欢吃芒果,喜欢吃苹果。你积累的丰富的挑 选芒果的经验规则都不行了,或许有些你可以transfer过去。你不得不从头再开始一轮一轮的实验尝试,看看苹果的一些特征跟好吃不好吃的关系如何?虽 然这个过程很枯燥,但是你去做了,因为你爱她。
规则列表
你想把如何挑选芒果(苹果)的这些东西用程序实现出来,这样在电脑上,甚至用你的手机扫描一下,就能自动挑选出很多好吃的芒果。因为你积累了一些规则,可以这么实现:if (color is bright yellow and size is big and sold by favorite vendor): mango is sweet.
if (soft): mango is juicy.
etc.
但是你想啊,这些规则越来越多的话,特征之间的组合啥的就越来越麻烦了,管理、使用都很麻烦。包括写程序实现啊,谁会笨到写这么多If Then。
机器学习
机器学习算法是普通算法的进化,更加聪明和自动。看如何把选芒果的问题定义成标准的机器学习问题吧。随机的选择了一个市场上的芒果,作为要研究的目标(training data)。你可以用一个表格描述芒果属性和类型的关系,每一行可以放一个芒果的数据,包括芒果的物理属性(feature):颜色、大小、形状、软硬度、产地,等等,还有这么芒果的类型(output variables):甜度、成熟度、多汁度。然后这就是一个多分类问题,或者回归问题,自动的从数据中学习出特征与芒果类型的各种关系等。
如果你用决策树算法,那么这个模型的样子就是你的规则库了;当然你可以使用其他模型,例如线性模型,这样就是特征的线性组合了。
下次你去市场,采集了一个芒果的各个指标特征,扔进你的模型,模型告诉你这个芒果是什么类型的?熟的?多汁的?
各种方法
甚至你的选择芒果的模型,稍微变化下就可以选择苹果了,迁移学习。甚至你的模型会随着新的样本、新芒果种类进来后,变的越来越好,增量学习。
。。。。。
有点知道机器学习什么事了么?
相关文章推荐
- 【随笔】2015年ICPC四省赛/邀请赛小结
- 值得推荐的C/C++框架和库
- (DBA之路【一】)mysql 基本架构
- Android NDK (学习笔记二) —— 开发第一个Android NDK项目
- pscp FTP拷贝命令
- java 强引用、弱引用、软引用、虚引用 浅析
- 获取手机安装包信息+运行应用信息
- 语义化版本 semver 2.0
- C语言自学的方法
- 黑马程序员_Java_反射机制总结
- es 常用命令
- DOM对象与jquery对象之间的转换
- xmlrpc实现bugzilla api调用(无会话保持功能,单一接口请求)
- 用JAVA代码构造一个日历
- SQL注入的原理解说,挺好!
- socket消息流程介绍及其C代码实现
- Ubuntu桌面上如何禁用默认的密钥环解锁提示
- LeetCode OJ----Reverse Integer
- 显示图片列表时出现异常java.lang.OutOfMemoryError或android.view.InflateException: Binary XML file line #98: Error
- 统计用户表的大小