重庆餐饮网

以麻辣火锅为例,解释机器学习原理(口水流了一地)

优达学城Udacity 2019-06-04 09:40:36

编译:欧剃


啥,火锅?!对,你没有看错,就是火锅!


冬天到了,谁不喜欢暖烘烘、香喷喷的火锅呢?想象一下,当你坐在一家你最喜欢的火锅店里,当服务员给你端上热气腾腾的锅子,当食材在沸腾的汤汁中翻滚沉浮,那四溢的香气简直要让冰冷的寒冬都退避三舍。



但你有没有想过,在这锅美味的背后,到底都有哪些工序呢?我指的可不是流着口水涮羊肉的过程,而是从最初对食材的挑选到服务员把锅端上桌的整个过程!有趣的是,这和机器学习过程中所需的工序并没有什么太大的区别。


骗你是小狗!听我一项一项细细说来~


1. 挑选食材——数据生成


为了打造最丰富的口感和最诱人的芳香,对食材的挑选是我们准备火锅的最初步骤,也是一切准备的基础。所以,我们得在市场里花费许多时间,锁定需要的食材和佐料。


这就像一开始的数据生成过程,就像那些用户操作,或者那些会触发传感器的移动、热源或噪声信号等,在这一步,我们将从所有可能的特征中,选取和最后模型直接相关的那些,并据此定下需要生成、测量、统计哪些数据。



2. 购买食材——数据收集


当你在市场上挑选到需要的食材和佐料之后,我们得把它们买下来,这个不难理解吧?


同样,这就对应了数据收集的过程,也就是通过统计程序、浏览器、传感器等,收集到所需的各种实际数据的过程。



3. 运输食材——数据准备


在采购结束后,我们得把这一大堆食材运回后厨,放进仓库里备用。这一步,你可能需要对食材进行简单的分类,比如有的食材需要放进冰箱或者冷库。


这就像是把数据整理到数据库或者数据湖之类的仓库里,以便程序读取。同样,在这一步,你可能需要把数据分成用于训练和用于检测等不同的部分。



4. 选择厨具和锅型——确定数据预处理方式和算法


对每一种食材,你都需要一个合适的厨具来处理它。如果你需要给土豆削皮,那刮皮刀显然比剪刀好用,如果你需要剁排骨,就得放下那个漏勺,抡起大菜刀。同理,对不同风格的火锅,也有不同类型的炊具(锅子)可供选择。比如老北京火锅,你就得用带烟囱的铜炉,而重庆火锅还是九宫格的有味道。当然为了满足各种不同的客人,你可能还得准备一些比较复杂的鸳鸯锅什么的。


当然,许多情况下,最简单的往往才是最好的——你一般不会见到哪家火锅店专门拿“鸳鸯锅”做招牌吧?——反正我是没见到。



同样,在机器学习的过程中,厨具就是你要采用的数据预处理方法,而炊具就是算法,比如线性回归算法或者随机森林算法等等。没错,如果真的有需要,你确实得准备点鸳鸯锅,额,我的意思是深度学习算法。这些不同的选项将是影响你模型效果的超参数。对于简单的锅子(划掉)算法来说.,这些超参数不多,但对于复杂的算法来说,超参数将会非常非常多。


此外,复杂的算法并不能保证一定会得到更好的结果(如果你不相信,请试试用下面这种锅来煎蛋什么的)。所以,请务必慎重选择你的算法。


5. 选择配方——选择模型


选定食材和炊具之后,你还需要选定配方,按照配方的要求准备好锅底所需的各种调味料、食材和锅子,这些千变万化的组合,最后形成了豚骨小锅、牛油辣锅、清汤老火锅等等一系列不同风格的产品。


这就是你的模型。不,模型和算法并不是同一个东西。一个模型包含了算法所要求的预处理和后处理过程。



既然说到了预处理,我们的下一个步骤就是……



6. 处理食材——数据预处理


我打赌,大部分配方的开头,都只写着“把xx切片”或者“把xx去皮”之类的话,而不会告诉你要把食材洗干净。这基本上算是一个默认的前提条件——毕竟没有人喜欢吃脏土豆,对吧?


对数据来说也是一样,没有人喜欢肮脏的数据。你需要进行数据清洗,也就是说,处理那些缺失值和异常值。然后你也要给它们削削皮、切切片——我是指,你要对数据进行预处理——比如将分类特征的值(比如“男/女”等)进行数字化编码(用0、1等数字来代表每种类型)。


大家都不喜欢这一步,不管是数据科学家还是厨师(大概吧)都不喜欢。



7. 打造特色——特征工程


有时候,你可以在食材上发挥许多创意,让它们发挥出不一样的特色风味,或是呈现出复杂精致的外观。


比如你可以用香料腌制切成薄片的牛肉,配上芳香的白芝麻;也可以把蔬菜切片摆盘成特殊的形状,再撒上一些清水;还可以用切碎的小米椒搭配香油蒜泥,加上秘制调料配成特色蘸料……


没错,这就是特征工程!这一步很重要,因为如果你干的足够巧妙,它能在很大程度上优化模型的表现。


基本上差不多每个数据科学家都喜欢这一步,我估计厨师们也一样。


8. 开始烹饪——训练模型


这一步是一切的重心——没有经过烹饪,锅底就只是那些食材和香料而已。显然,你需要将各种原材料放进炊具里,调整火候,等上一段时间,然后再来看看。


这就是训练模型的过程了。你把数据放进算法里,调整各种超参数,等它训练上一段时间,再来检查一下。



9. 品尝调味——微调参数


就算你逐字逐句依照菜谱来做,你也无法保证每一个细节都完全无误,对吧?所以,你要怎么知道有没有弄错什么?当然是尝一尝啦!如果汤底不对头,你可以尝试加一些调料进行调味,也可能要调整一下火候来挽救一下什么的——但你还是要继续煮下去!


某些不幸的时候,你的锅底可能会黏住、烧糊,或者不管你怎么去挽救,汤的味道尝起来都很恐怖。那么,你只能含着热泪把它倒掉,从失败里吸取教训,重新来过。


只要坚持不懈,在加上一点点运气,你还是很有希望熬出一锅美味的汤底啦~



调味就像是评估和微调的过程。你需要检查你的模型,判断它是否按照你设想的那样运行。如果不是,你可能需要加入更多的特征,或者调节超参数,以期对模型产生改变。但你还需要继续训练下去!


同样,在某些运气不好的时候,你的模型完全无法收敛,或者不管你怎么调整它都无法给出满意的预测结果。那么,你也只能含泪丢掉这个模型,吸取教训,从头来过。


只要坚持不懈,在加上一点点运气,你还是很有希望训练出一个高性能的模型啦~



10. 端菜上桌——打包部署


到这一步,从厨师的角度来看,ta的工作已经完成了。火锅已经准备好,食材和涮料齐备,搞定。


但我们的客人还是饥肠辘辘,桌面空空如也。如果火锅店没有及时把客人点的东西送上桌,那这个店多半是要倒闭的,厨师也得下岗。


所以,当一切齐备的时候,还需要小心地将火锅端上桌,布置好各种涮菜、小碟,餐具、漏勺,客人们才能开吃。如果上菜的时候把食材洒了,甚至把锅底打翻了,那之前干的活都白做了。


这个过程就像是机器学习模型的部署过程。这时候端给客人的就不是火锅,而是预测函数。就象锅底一样,预测函数也要“装起来”,上线部署变成“数据产品”,让客户可以把“食材”数据放进去,并且得到想要的结果。如果在这过程中流水线(pipeline)出了问题,甚至对预测函数产生了破坏,这之前所有的训练和调整过程也就都“泡了汤”啦。



当当当!搞定啦!这就是火锅里的机器学习之道——在这个过程中,许多人共同努力,合作熬出了最后的美味!


几个小贴士:

● 如果食材本身不好,做出来的汤肯定不行——没有什么配方能挽救这种问题,也没有什么炊具能改变这个现实。

●如果你是厨师,请别忘了,要是服务员不把锅端上去,那就没有人能享用到这些美味了。

● 如果你是餐馆老板,别强迫你的厨师用什么厨具/炊具——你不可能一把菜刀应万变,也不可能永远都用鸳鸯锅——另外,如果你的厨师不得不花上大量时间清洗和处理食材的话,ta一定不会很高兴的。

说了这么多,不知道你的感觉如何,反正我是按耐不住,要去吃一次X底捞了……


欢迎大家留言分享你对“火锅”的看法!


参考和图片来源:

● Daniel Godoy https://towardsdatascience.com

● pixabay.com

● unsplash.com


名师出高徒。想和领域大牛一起学人工智能?点击 [阅读原文] ,Google X 创始人,Google Brain 科学家带你深入《机器学习工程师》纳米项目。预测房价、狗狗识别、训练机器人走迷宫,硅谷超棒的实战项目等你挑战

Copyright © 重庆餐饮网@2017