买芒果
嘴馋的你想吃芒果了,于是你走到水果摊,挑了几个让老板过过秤,然后你再根据芒果的斤两付钱走人。
显然,买芒果你当然是挑着最甜、最熟的来买(因为你是根据重量而不是质量来掏钱的)。怎么个挑法才靠谱呢?
对了,你奶奶说过,金黄色的要比浅黄的更甜些。于是你就做了一个简单的规定:只挑金黄色的买,过磅、付钱、回家。就这么简单?
不尽然。
生活没那么简单
拎着芒果回到了家,尝了尝,你发现有些很对口味,有些则马马虎虎。显然,光凭你奶奶的智慧还是有所不足的。挑芒果不能只看颜色。
一番细品,再一番苦想之后,你得出了结论:那些大个儿的、金黄色的芒果一定是甜的,而那些小个儿的、金黄的就只有一半是甜的了。(比如,你买了 100 个黄灿灿的芒果,50 个个头较大,50 个个头一般,那么个头大的那 50 个就都是甜的,个头小的 50 个当中就平均只有 25 个是甜的了。)
你对自己的研究发现甚感满意,想着下次买芒果的时候能更靠谱些。终于你又来到了水果市场,发现你最常去的那个水果摊已经见不着踪影了。于是你就找了另一个摊档,而他们的芒果又产自不同的地方。你挠挠头,叹了口气:得了,“大个、金黄色的果子甜”的经验在这又不适用了,一切从头开始。尝了一遍后,你发现那些小个的、浅黄的芒果是当中最甜的。
你的表妹大老远的来看你,你决定给她整些美味的芒果尝尝。但她并不在乎果子甜不甜,而只关心是不是鲜嫩多汁。好吧,你又挠挠头,在果摊尝了一遍,发现越软的越多汁。
这次,你到了另一个国度。这儿的芒果味道与家乡的截然不同:绿色的竟然要比黄色的味道更棒。
你结了婚,发现她对芒果完全不感冒,而对苹果很是喜欢。这回,你又跑去买苹果去了。你又得学神农“遍尝百果”,摸索苹果的物理特征和味道之间都有怎样的联系——为了她,又有什么不可以的呢?满满的都是爱呀。
写段电脑程序来帮忙
为什么不用电脑程序来帮你挑芒果(或苹果)呢?你把规则写了出来:
if (color is bright yellow and size is big and sold by favorite vendor): mango is sweet.
if (soft): mango is juicy.
etc.
这就是你挑芒果用到的规则了。把它发给你的弟弟,想必他也能帮你买到对你口味的芒果。
但问题在于,每回你在试验之后得出了观察结果,你都得把规则做一番修正。你还得明察秋毫地了解清楚都有那些因素在影响芒果的品质。如果问题复杂起来的话,你在上面耗费的心血甚至都有可能为你拿个“芒果科学”的 PhD 下来(如果有的话)。
但这样的大闲人还真的不多。
写个机器学习算法吧
机器学习算法是普通算法的进化版,它们让你的程序变得“更聪明”,能从你提供的数据里自动学到东西。
你在市场上随机选择了某个品种的芒果(training data),把每个芒果的物理特征都写进了一个表格——颜色、大小、形状、产地、所属果摊等(features),甜度、多汁程度、成熟度(output variables)也做了记录。你把这些数据都放进了一个机器学习算法(classification/regression),然后这个算法就会自动从芒果的物理特征和品质之间得出一个相关性模型。
等到下一回你到市场的时候,你把在售的芒果的特征信息都收集起来,再扔进你的机器学习算法,它就会利用之前计算出来的模型来预测哪些芒果是甜的、熟的、以及/或多汁的了。该算法可能会使用和你曾经手写的差不多的规则,也有可能使用的规则会更有相关性,不管怎样,在很大程度上你都不用操太多心了。
现在,算法在手,你就可以挺直身板去买芒果去了。更重要的是,你的算法还能继续演进(reinforcement learning),读取更多的训练数据,准确率也更高,每预测错误后再进行自我修正。更妙的是,你还能用同一个算法来训练不同的模型,预测预测苹果、橙子、香蕉、葡萄、樱桃、西瓜什么的。
机器学习:让你的算法聪明起来,这样你就可以少动脑了。:)