我们先来说个老生常谈的情景:某天你去买芒果,小贩摊了满满一车芒果,你一个个选好,拿给小贩称重,然后论斤付钱。
自然,你的目标是那些最甜最成熟的芒果,那怎么选呢?你想起来,啊外婆说过,明黄色的比淡黄色的甜。你就设了条标准:只选明黄色的芒果。于是按颜色挑好、付钱、回家。啊哈,人生完整了?
呵呵呵。
告诉你吧人生就是各种麻烦
等你回到家,尝了下芒果。有些确实挺甜,有些就不行了。额~显然,外婆教的金科玉律还不够用,光看颜色不靠谱哪。
闭关研究大半天以后,你得出结论:大个的明黄色芒果必然甜,小个的,就只有一半几率会是甜的了。
于是下次,你满意地带着这个结论再去买芒果,却发现你经常光顾的那个小贩关门度假去了。好吧,换家店,结果人家的进货渠道还不一样,那芒果是另一个地方种的。你这套法则不管用了,又得从头再来。好吧,这家店里每种芒果你都尝了下,总结出来小个淡黄色的最甜。
还没结束。你远房表妹又来找你玩了。要招待些好的吧?但她说了,她无所谓芒果甜不甜,汁水多就行。好呗,你还得再做一次实验,找到芒果越软汁水越多的规律。
接着你又移民了。一尝这边的芒果,咦,新世界的大门打开了。绿色的芒果居然比黄色的好吃……
最后,你结婚了,领导表示不爱吃芒果,要吃苹果。于是你所有关于芒果的知识都没用了。只能按老方法再重新研究遍苹果的物理特征跟它味道好不好之间的关系。苹果吃到吐?没办法,你爱老婆嘛。
有请码农
好了,现在想象下,这一路辛酸曲折的,你写了组程序帮忙减轻负担。那程序逻辑基本应该类似这样:
预设变量 颜色、大小、店家、硬度
如 颜色=明黄
大小=大
店家=经常光顾的小贩
则 芒果=甜
如 硬度=软
则 芒果=多汁
用着很爽吧,你甚至可以把这套玩意儿发给你小弟,他挑来的芒果也包你满意。
但每做一次新实验,你就得人肉改一次程序逻辑。而且你得首先保证自己已经理解了选芒果那套错综复杂的艺术,才能把它写进程序里。如果要求太复杂、芒果种类太多,那光把所有挑选规则翻译成程序逻辑就够你出一身大汗,相当于读个“芒果学”博士了。
不是所有人都有“读博”的功夫的。
有请“机器学习”算法
机器学习算法其实就是普通算法的进化版。通过自动学习数据规律,让你的程序变得更聪明些。
你从市场上随机买一批芒果(训练数据),把每只芒果的物理属性列一个表格出来,比如颜色、大小、形状、产地、店家,等等(特征),对应芒果的甜度、汁水多少、成熟度,等等(输出变量)。然后把这些数据扔给机器学习算法(分类/回归),它就会自己计算出一个芒果物理属性与其品质之间的相关性模型。
等下一次你去采购时,输入店里在卖的芒果的物理属性(测试数据),机器学习算法就会根据上次计算出来的模型来预测这些芒果品质如何。机器用的算法可能跟你人肉写的逻辑规则类似(比如决策树),也有可能更先进,但反正基本上你不用多虑。
好啦,现在你可以信心满满去买芒果了,颜色大小啥的都是浮云,交给机器去操心呗。更妙的是,你的算法还会逐渐进化(强化学习):根据其预测结果的正误,算法会自行修正模型,那么随着训练数据的积累,到后来它的预测就会越来越准确。最妙的来了,用同一个算法,你可以做好几个模型,苹果桔子香蕉葡萄各给爷来上一套,不要说老婆有令,就是七大姑八大婶各有所好,也再不用发愁了。
用一句话总结机器学习就是:走自己的屌丝路,让你的算法牛逼去吧。