社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

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

数据魔术师 • 7 年前 • 631 次点击  
序言
:漫谈机器学习


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



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


一、

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


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


二、

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


去年冬天,我在美国的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