Python中国社区  »  机器学习算法

机器学习|刘博士谈机器学习--开篇

数据魔术师 • 1 周前 • 28 次点击  
序言
:漫谈机器学习


"
从这篇开始,我将开始撰写一系列机器学习相关的文章。我的研究方向是数据挖掘,主要使用统计建模的方法,对于机器学习,我也是入门不久,算是初窥门径。我希望通过这种新媒体的方式,用一些短小精练的文章,和你们分享我对机器学习的理解和认识,特别是我在解决实际数据问题时的思维。你们可以把我的文章看作是对于市面上优秀教材(比如周志华教授的西瓜书)的一个注释,当你理解我的思想时,不论你同意或不同意,我相信,你会对机器学习有更加深入的了解。
"



在这一篇文章,我想和你们形而上地聊一聊机器学习,算是这个系列文章的一个序言吧。


一、

上周四的研究生课上,我在讲完支持向量机后,问了学生一个问题:机器学习是用来干什么的?没有学生回答我,场面一度很尴尬。这个结果并不好。学习一门课程,一定要理解这门课程的用处。特别是对于非数学以及非计算机专业的学生,本身在理论模型和编程上已经不具备先天的竞争优势,那么理解机器学习的用途、并针对企业运营构建合适的机器学习算法应用场景,可以当作自身的一个竞争力。但前提是,要懂机器学习是用来干什么的。


想一想机器学习早期的一个经典应用:垃圾邮件判别。应用背后,是一个机器学习模型,该模型会分析过往你所接收的邮件域名、标题、发件人地址等,判断该邮件是不是垃圾邮件或者恶意邮件,如果是,则直接删除。你肯定也遇到过这样的场景,就是当你浏览完某个景点的游记后,在新打开的网页的广告栏处,恰好是你刚刚浏览的景点在携程上的酒店信息。显然,你的浏览记录已被该网站获取,并通过机器学习模型,判断你可能要去旅游,从而为你推荐携程的广告,增加广告点击率。所以,我认为,机器学习的主要用途,是判断。除了上述场景,还包括,零售商判断产品销量、证券从业者判断股票涨跌、银行判断客户是否违约、教练判断球员是否可以上场等。只要和判断有关,又有足够多的训练样本,机器学习是一个可以被考虑的工具。


二、

如果你同意我说的,机器学习,目的在于判断,那么为什么这个学科,不直接叫做机器判断,而叫做机器学习呢?


去年冬天,我在美国的Coach店里,为了享受折扣,注册了它的会员,并留下了我的邮箱。在那之后,每当夜晚来临的时候,Coach总会给我发来一封邮件。一开始,我还打开看一看,在连续几封都是促销内容后,我再也不看了,每次都是直接删除。我为什么可以看也不看,就可以判断它一封毫无价值的广告邮件呢?很明显,我掌握了一个知识:Coach发的都是广告邮件。我以为,知识,是判断的基础;而知识,是通过学习获得的。显然,如果机器,也能够掌握这样的知识,它也可以做出和我一样的判断。


人非圣贤,岂能生而知之;机器也一样。机器需要通过学习来获取支撑判断的知识。和人相比,机器学习有优势,也有劣势。优势是,机器具有人所不能比拟的存储和计算能力;劣势是,机器有自己特殊的语言和逻辑,需要为其设计专门的学习方法。


三、
机器如何学习?


首先想一下,我们是如何学习的?虽然正在读这篇文章的你已经具有了自主学习的能力,但在我们小时候,主要是靠家长或者老师来教的。你可以把机器当作一个孩子,把机器学习的算法比拟成教学方法,把数据看作是教材。我们常可以看到,接受不同教育的孩子,其未来发展是不同的。类似的,不同的算法和不同的数据也会导致机器在面对同一个问题时,具有不同的学习速度(快或慢)和学习结果。


举一个非常简单的例子。大家都知道,一颗骰子,如果点数超过3,则是大,如果小于或等于3,则是小。这是一个简单到极致的判断问题。


我们可以写一个算法,即当输入x小于或者等于3时,输出y=0(我们这里让y=0代表结果“小”);否则,输出y=1。这个算法就是一个if else语句罢了。但是,它的效果如何呢?对于我们刚才的例子,这个算法完全没有问题,机器可以使用这个算法做出正确的选择。


但是,假设赌场不玩六面的骰子,开始玩8个面的。点数超过4,则是大;点数小于或者等于4,则是小。那刚才那个算法,就不对了。我们可以再写一个算法,让机器在面对八面骰子的时候:输出y=0,如果输入x小于或者等于4;否则,输出1。但这两个算法,在碰到又一个新骰子的时候,又会失效。这就好像是我们教小孩子,只让他简单记住规则,不能够举一反三,这属于填鸭式的教育。


你可以考虑这样一个算法:当点数比最大点数的1/2还大点时候,就输出y=1;否则输出y=0。这样一个算法,在面对6面骰子和8面骰子的时候,都可以做出有效判断,可是这个算法没有学习的能力。比如有一天,你身处赌场,荷官掷出6面骰子,点数是4;这时根据以往的知识,你肯定以为这是大,但结果荷官,说4点是小。那这个时候,你大概会有两个想法:1. 你的知识没错,这个荷官出错了;2. 这个赌场没问题,可能规则变了。这两个想法孰轻孰重,影响了你之后再次看到4点时的判断。但从另一个角度来说,如果你之后可以再次看到荷官把4点当作是小,那么就会加深你对于想法2的倾向;否则,就会加深你对想法1的倾向。你通过不停地观测,来修改或补充自己知识的过程,就是一个学习的过程。


我们希望在机器上重复上述的学习过程。在判断大、小的时候,一个关键的参数是阈值,究竟点数小于几才是小。我们用一个数字,比如t(threshold的第一个字母)来代表这个阈值,然后,机器判断大小的方法是:当x-t>0时,y=1;否则,y=0。我们有个先验的知识,就是x比3大,y=1。所以,t可以是3到4(但是不能等于4)之间的任意值。我们也知道,点数都是整数,所以,就让t=3。如前所说,有一天,一个荷官表示点数4也意味着y=0。这相当于是给机器输入了一个数据(4, 0)。可是我们知道,机器会把这个点判断为(4, 1),那么在这个数据上,它犯了错。那么如何弥补这个错误呢?或者如何再面对错误的时候,调整参数来防止未来再犯错误呢?当机器判断为(4, 1)而实际是(4, 0)时,意味着,阈值可能选低了(现在的阈值是3,如果阈值是4,那么这个错误不会犯),因此这个错误是让我们调高阈值。对于机器,我们定义这样一个学习过程,当把应该是0点判断为1时(你自己想一下是什么导致的),这时的错误时0-1=-1,我们让t增长1。令y’为机器的判断,y为实际结果,我们令错误e=y-y’,而后令t=t-e。你看,这样一个简单的算法,就是说,每当机器看到一个新的x以及与其相应的y后,它就可以根据这个算法调整t。这个算法,已经具有了神经网络的基本性质。


通过这个例子,我特别说明,在赋予机器学习的能力之前,我们首先要思考相关问题的学习过程,然后把我们的思维以程序语言的形式,写入机器中。所以,我总是在课上强调,就目前的人工智能环境下,机器并无思考能力,从而我们对问题对思考方式就非常重要。思考方式,或者说解决问题的思考方式,不全在计算机学科中,许多解题的思考方法是从数学、心理学、经济学中得来的。所以,不要以为你们不是计算机背景,就不可以进入这个行业,每个专业都会训练人的思维。


四、

现在,你可能还对那个骰子的例子有些疑惑。如果之前骰子的结果都是小于3,即0,大于3,即1,这里突然看到(4, 0),就把t调整到4,会不会太草率。因为这可能是荷官犯的个人错误,若此后他不再犯错,x=4又再次意味着y=1。


的确是有可能太草率。为了说明这个草率的问题,我把用来训练参数t所使用的数据称之为训练集,假设训练集包括11个观测:(1, 0), (2, 0), (1, 0), (3, 0), (6, 1), (5, 1), (6, 1), (4, 0), (5, 1), (2, 0), (3, 0)。在训练之前,我们假定阈值t的初值是0(你当然可以假定它是3,如果t=3是你的先验知识)。那么你用我在第三节,倒数第二段说的算法,你会发现t最终结果是4。但是,这里值得质疑,因为数据里,骰子只有一次是点4,这个点的结果可能是荷官搞错了,也就是说这个数据不能反映真实情况。记住:这个世界充满了随机性,数据里可能存在着很多错误的、或者不可解释的观测。那么,我们是不是要让算法尽可能满足训练集的每一个观测呢?绝大多数时候,答案是不。因为,尽可能满足数据的所有观测会导致一个叫做“过拟合”的结果。比如,这里为了迎合(4, 0)这个点,t的结果是4。(4,0)这个点,依据我们的生活经验,八成是错的,但仍然有概率是对的。所以,我们可以改改这个学习算法,用这样一种思维:当一件事情被强调两遍时,我们就认为这件事是对的,从而让算法适应它。具体算法如何,这里不说了,你们可以留言。



这篇文章,就言尽于此,用一句话总结:机器学习的方法源于我们对问题的思考


实际上,我这篇文章早就该写完,秦教授是我师兄,也是这个公众号的运营者,一直催着我要文章的稿件。我写了好几版,始终觉得自己的论述有值得推敲的地方。思来想去,易稿又易稿,却在今晚终于想清楚,既然我所谈论的机器学习,本身就是一个不停试错而后成长的过程,那么我还坚持写出一篇挑不出错的文章,实在是着相了。于是,我在今天把此文发出来,希望读者能多给批评,我也好提高后续文章的水平。

生命是一条川流不息的河流,我们,都是那个渡河的人。








(向上滑动查看内容)


附言1:后续的文章,会分问题介绍机器学习的各个方法,尽量用自然语言,而不是数学或者编程语言(我知道这很难),我会在公众号,哈希大数据,发布后续的文章。你们可以搜索关注,也可以在我师兄的公众号,数据魔术师,看转载。我和我师兄,不分彼此。

附言2:我的文章,只能帮你入门,登堂入室,还得靠你进行大量阅读和尝试。这天底下,不靠天赋,不靠颜值,不靠父母,还能够让自己变的有魅力的方法,无非是学习。如果你希望在数据分析方面获得更好的发展,那就去努力吧。




扫码可加入QQ群,获取更多的运筹优化算法及人工智能算法学习资料

↓↓↓


 赞 赏 

长按下方二维码打赏

感谢您,

支持学生们的原创热情!

郑重承诺

打赏是对工作的认可

所有打赏所得

都将作为酬劳支付给辛勤工作的学生

指导老师不取一文





精彩文章推荐

【学界】供应链管理:理论、模型和应用概述

干货 | 十分钟掌握禁忌搜索算法求解带时间窗的车辆路径问题(附C++代码和详细代码注释)

【学界】深度学习如何影响运筹学?

你永远都不知道男生有多想和18岁女孩子谈恋爱!

论文拾萃 | 电动汽车物流配送系统的换电站选址与路径优化问题研究



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/jikA50tDaN
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/12025
 
28 次点击  
分享到微博