原创:谭婧
菜谱里的成分有什么重要?不就是糖、盐、酱油醋。
它们很重要,拿破仑远征俄国,从莫斯科撤退的时候,成千上万的法国士兵因为缺盐而死亡,这成为拿破仑失败的重要原因之一。
蔗糖种植园里的奴隶日夜劳动生产蔗糖,蔗糖象征着欧洲对殖民地的控制。
菜谱里的成分虽然微不足道,但是反应了社会关系与人类发展。
Mike Jones用机器学习算法分析了很多菜谱,想从中间发现规律。他采用的菜谱来源包括威尔士国家图书馆(National Library of Wales)和在线版的威尔士报纸(Welsh Newspapers Online)。
虽然该网站确实包含许多烹饪食谱,但该网站的全文搜索性质并不总能返回预期的结果。这让他有了使用机器学习对报纸数据库中的文章进行分类并根据结果创建菜谱的想法。
一、数据
分类文章的第一个阶段是收集文件语料库进行分类,来自“ 烹饪”,“烘焙”和“ 食谱”这三个关键词的搜索结果,搜索到198966篇文章,经过对搜索结果的分析,许多文章相关烹饪来自《家常菜(Homely Hints)》和《一日一菜(Dainty Dishe)》里的文章,有10105篇文章之多。结合搜索结果给他总共对205131篇文章进行了分类。
二、算法和工具
分类中使用的编程语言和包是Python,Scikit-learn和nltk。他选择用于文章分类的算法是也用于检测垃圾邮件的朴素贝叶斯分类器。
在报纸数据集上使用了以下分类器:
朴素贝叶斯
MNB_classifier
BernoulliNB_classifier
LogisticRegression_classifier
LinearSVC_classifier
SGDClassifier
每篇文章将根据这些分类器进行分类,并且分类器的结果(positive 或者 negative)被放置在投票系统中,如果一篇文章具有较高百分比的positive结果,则将其标记为菜谱,否则该文章将被忽略。在训练数据时,伯努利分类器被证明是最不准确的算法。
三、训练
要将文章归类为“ 正常 ”或“ 垃圾 ”,我需要使用包含菜谱的示例文章和不包含菜谱的文章来训练分类器。为达到这个,他首先编写了一个bash脚本(bash script)从205131篇文章中检索500篇随机文章,并将它们提取到MySQL数据库中,然后他写了一个小的PHP应用程序,允许查看文章并选择文章是“ 正常 ”还是“ 垃圾 ”。
然后将包含菜谱的文章导出为“positive.txt”文件,不包含菜谱的文章导出到“negative.txt”文件。
训练分类器
分类器结果:
朴素贝叶斯精度 - 91.16%
MNB_classifier准确度 - 95.11%
BernoulliNB_classifier准确度 - 90.98%
LogisticRegression_classifier准确度 - 93.74%
LinearSVC_classifier准确度 - 93.98%
SGDC分类器精度 - 94.20%
一旦训练了分类器,他就按照205131篇文章的完整数据集运行经过训练的分类器,这个分类的6029篇文章是与烹饪有关的食谱。
为了完成这次分析工作,Mike Jones还整理成册了一本46页的菜谱,一百多年前的英国菜谱,想做饭的可以去参考一下。
四、结论
好的,经过可视化,这样就能知道1890年到1910年,菜谱里排名靠前的配料有哪些。
没错,食谱中的配料成分中用的最多的是糖。(图中海蓝色的柱状都是糖)
人类可真是偏爱甜食。
我们可以看到,随着食谱文章数量的增加和受欢迎食谱配料的增加趋势是一致的。
参考英国三百前的商品进口数据,英国每年的人均糖消费量在1704年为3.6斤,1800年为16.3斤,1901年为81.6斤 ,这一百年间,英国人的糖摄入量在欧洲位列第一,增长了22倍。
本文结论中食谱配料用量的增加和商品进口数据增长趋势也一致。看来这糖是真吃了不少,而且越吃越多。
时值春节假期,考虑到1700年代普通英国人每年只吃3.6斤糖,是时候控制一下了,最后我们复习一下各种食品里的糖含量。
(完)
领取专属 10元无门槛券
私享最新 技术干货