當前位置:
首頁 > 知識 > 手把手帶你用無監督學習檢驗國際美食!

手把手帶你用無監督學習檢驗國際美食!

作者:Ben Sturm

翻譯:和中華

校對:Nicola

本文約2900字,建議閱讀10分鐘。

本文作者將自己所學的數據科學知識和一顆吃貨的心相結合,對12,500個來自世界各地25種菜系的食譜進行了無監督分析,並發現了一些有趣的結論。

Typical Tyrolean K?sesp?tzle (Image courtesy:https://austria-forum.org/)

像很多人一樣,我也是一名吃貨。我很幸運能在一個所有食物都是從頭開始親自做的家庭里長大。所有的烹飪都由我媽媽完成,因為她是從德國移民到美國的,我也跟著接觸了很多美味的德國菜。我最喜歡的一些包括K?sesp?tzle,Semmelkn?del和Sauerbraten。雖然我沒有媽媽的烹飪天賦,但我非常喜歡從頭開始做飯的過程,當然也會和我的家人分享的過程。

以此為背景,我覺得開展一個涉及世界各地食譜的數據科學項目肯定很有意思。我想看看是否能夠了解世界各地不同菜系的關係。為了探索這個主題,我從代表了25種不同菜系類型的12,000種不同食譜中收集了數據。然後,我進行了自然語言處理(NLP),將文本數據轉換為可以輸入機器學習演算法的格式。最後,我進行了主成分分析(PCA)和主題建模,以獲得對數據的深入見解。


數據收集

這個項目的食譜數據來自Yummly。我獲得了API的一個學生許可證(謝謝Yummly!),讓我可以直接從ipython notebook進行查詢和搜索食譜。Yummly支持根據菜系類型進行搜索。以下是所支持的菜系類型清單:

美式,義大利菜,亞洲,墨西哥,美國南部料理,法國,西南地區食物,燒烤,印度,中餐,克里奧爾風味,英國,地中海,希臘,西班牙,德國,泰國,摩洛哥,愛爾蘭,日本,古巴,夏威夷,瑞典,匈牙利,葡萄牙

總的來說,我為25種菜系分別下載了大約500份食譜。這就產生了12,500種不同的食譜。關於數據收集,我通過Requests庫讀取數據,使用內置JSON編碼器將JSON數據轉換為python字典。之後將數據轉換為Pandas DataFrame就相對簡單了。下圖展示了DataFrame中的某些行:

對於我的分析,我只使用了與菜系和配料相關的列。其他列都被忽略了。


文本數據處理和機器學習工作流

由於數據僅由文本組成,因此有必要使用NLP技術進行許多預處理步驟。這些步驟如下:

用連字元連接某些配料(例如olive-oil橄欖油,corn-starch玉米澱粉)

分詞,將配料分解成單詞的列表

刪除停頓詞和其他經常出現的詞(例如鹽,胡椒,水)

通過刪除單詞的複數形式和其他後綴來詞幹化

詞袋處理從而創建一個稀疏矩陣,該矩陣由配料列表中的所有單詞以及它們出現的頻率組成

實現上面步驟列表的工具包括sklearn中的TfidfVectorizer和CountVectorizer。 其中一些步驟,如刪除連字元和停頓詞,需要編寫自己的代碼來實現,因為這些步驟更針對於這個具體的用例。讀者可以查看我的Github repo來了解更多信息。

我關注的機器學習演算法都是無監督學習演算法。我用了k-Means 聚類來查看是否可以根據菜系類型將食譜聚集在一起,但是聚類對我的分析並不是很有幫助,因為我不清楚不同的聚類代表什麼。相反,我把注意力放在主成分分析(PCA)以及Latent Dirichlet Allocation(LDA)上,具體內容我將在結果部分進一步討論。


結果

為了能夠可視化數據,我實現了降維,以便將1982個維度(對應數據集中不同配料的數量)的特徵空間減少到2維。這一步是使用PCA完成的,我保留了前兩個主要組成部分。然後,我針對前兩個主成分創建了每個食譜的散點圖,如下所示:

12492個食譜在前兩個主成分上的散點圖

當在2維主成分空間中繪製所有食譜時,我沒有學到很多信息,因為許多數據點都是重疊的,因此很難從數據中看到任何結構。然而,通過菜系對食譜進行分組並沿著前兩個主要成分獲取質心值(Centroid values),我可以在數據中看到一些有趣的結構。如下所示:

沿著第一、第二主成分的每種不同菜系質心值的圖。組(A)與亞洲美食相關,(B)由日本和夏威夷美食組成,(C)和(D)分別是歐洲和美國美食。組(E)是來自世界各地的美食混合,包括古巴,墨西哥,印度和西班牙。

上面的圖提供了一些關於不同菜系關係的有趣見解。我們可以觀察到質心值傾向於根據類似的菜系對食譜進行分組。例如,圖2中的組(A)由中國,泰國和亞洲菜組成,這些都可以歸類為亞洲食品。組(B)包括日本料理和夏威夷料理。這兩種菜系都非常注重魚類,因此將它們緊密地組合在一起是有道理的。組(C)完全由瑞典,法國和德國等歐洲美食組成,不遠處的組(D)主要由北美菜肴組成。這些包括南部,燒烤和傳統的美式菜。最後,組(E)是來自世界各地的美食混合,包括古巴,墨西哥,印度,西班牙和西南美食。當我想到這些美食時,我會想到加重的味道,所以將這些美食緊密地組合在一起是完全合理的。

讀者可能會問的問題是,哪些特徵(即配料)與第一和第二主成分的聯繫最緊密?這可以在下圖中看到。

與第一和第二主成分最強烈相關的配料

該圖是對兩個主成分相應的主要特徵的直觀表示。雞肉,大蒜,洋蔥和番茄等配料沿著主成分1的正方向有很強的聯繫。這些口味與西班牙或印度菜等美食有很強的聯繫。另一方面,雞蛋,黃油,麵粉,牛奶和糖在主成分1的負方向上具有強烈的聯繫。這些是典型的法國或英國菜肴的原料。同樣,大豆,醬油和大米與主成分2的正方向有很強的聯繫。這些配料在亞洲美食中很常見。最後,乳酪,檸檬,橄欖油和番茄與主成分2的負方向有很強的聯繫。這些口味在義大利和希臘美食中非常常見。該圖有助於解釋前一個圖的結構,即當沿第一和第二主成分繪製時某些菜系在特定區域聚集在一起的原因。

最後,我還運行了一個LDA模型來進行主題建模(見下文)。我很想知道是否有可能根據各種配料通常所屬的美食菜系來將其分離。我指定的主題數量為25,因為我知道數據集中有25種不同的菜系。然而,LDA的結果有點混亂。在某些情況下,LDA主題是特定的菜系,比如義大利菜或泰國菜。然而,還有一些主題是不同類別的菜肴,比如甜點,醬汁,甚至雞尾酒。雖然這個結果不是我想要的,事後看來它實際上是完全合理的。LDA是一種機器學習技術,可以識別出經常出現在一起的單片語(group of words)。因此,在超過12,000個食譜的語料庫中,基於菜肴的類型(即甜點,湯,沙拉或醬汁)而非菜系類型,可能存在更強的單片語關聯

LDA主題建模的結果


思考

我在探索食譜數據集時有很多樂趣,因為我非常享受將我對食物的熱愛與我在數據科學中獲得的新技能相結合。人們還可以為此類分析做一個商業案例,因為這些信息可用於向Yummly平台的用戶提供菜譜推薦。例如,非常喜歡燒烤的人也可能喜歡葡萄牙美食,因為這兩種菜系在沿第一二主成分繪製質心時會重疊。這種內在關係是我在沒有探索數據之前無法預料的。

然而需要注意的是,本文使用的數據並非沒有缺陷。比如,Yummly基本上是一個彙集了來自許多其他食譜網站或博客的食譜網站,所有這些都是英文的。因此,許多食譜可能是站在美國人的角度對其他美食的看法。我相信我的義大利朋友會說像雞肉和香蒜醬這樣摻和在一起的食譜「並不義大利!」,儘管Yummly將這個食譜標記為義大利式。處理這個問題的一個更好的方法可能是找到他們母語的食譜,並使用一些高級翻譯演算法將它們翻譯成英語。然而,由於食物配料可能對特定地理區域是特定的,這也可能導致意外問題。例如,某些配料可能沒有英語中的等價物(例如,Prosciutto di Parma,Parmigiano Reggiano),因此這些配料將始終與義大利美食相關聯。這可能會導致不同類型的菜系之間只能找到更少的相似性,但仍然值得探索。

非常感謝您閱讀我的博客文章。如果想瀏覽我的代碼,可以在Github repo中找到它。此外,我也非常歡迎反饋,如果你喜歡這篇文章,請給我點個贊。

原文標題:

An Examination of International Cuisines through Unsupervised Learning

https://towardsdatascience.com/an-examination-of-international-cuisines-through-unsupervised-learning-93c8b56d1ea0

譯者簡介

和中華,留德軟體工程碩士。由於對機器學習感興趣,碩士論文選擇了利用遺傳演算法思想改進傳統kmeans。目前在杭州進行大數據相關實踐。加入數據派THU希望為IT同行們盡自己一份綿薄之力,也希望結交許多志趣相投的小夥伴。

翻譯組招募信息

工作內容:需要一顆細緻的心,將選取好的外文文章翻譯成流暢的中文。如果你是數據科學/統計學/計算機類的留學生,或在海外從事相關工作,或對自己外語水平有信心的朋友歡迎加入翻譯小組。

你能得到:定期的翻譯培訓提高志願者的翻譯水平,提高對於數據科學前沿的認知,海外的朋友可以和國內技術應用發展保持聯繫,THU數據派產學研的背景為志願者帶來好的發展機遇。

其他福利:來自於名企的數據科學工作者,北大清華以及海外等名校學生他們都將成為你在翻譯小組的夥伴。

點擊文末「閱讀原文」加入數據派團隊~

轉載須知

如需轉載,請在開篇顯著位置註明作者和出處(轉自:數據派ID:datapi),並在文章結尾放置數據派醒目二維碼。有原創標識文章,請發送【文章名稱-待授權公眾號名稱及ID】至聯繫郵箱,申請白名單授權並按要求編輯。

發布後請將鏈接反饋至聯繫郵箱(見下方)。未經許可的轉載以及改編者,我們將依法追究其法律責任。

點擊「閱讀原文」擁抱組織


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 數據派THU 的精彩文章:

避坑指南:數據科學家新手常犯的13個錯誤

TAG:數據派THU |