無監督學習是推斷描述“未標記”數據的分布與關系的機器學習任務,即給予學習算法的示例是未被標記的,因此沒有直接的方法來評估算法產生的準確性。無監督學習根據應用任務的不同的算法也不盡相同,最常用應用的是聚類和降維。本次將為大家揭開無監督學習的面紗,通過和兩只貓的故事對無監督學習進行簡單易懂的解釋,并通過對世界美食的探索之旅,開展對無監督學習的實踐教程。
揭開無監督學習的面紗
▌前言
無監督式學習實際上是一種從數據中挖掘靈感與啟發的模式發現技術。但是聽起來好像在表達“讓孩子們自己學會不要去碰熱烤箱”這樣的事情,其實無監督學習與機器在沒有人監督的情況運行,形成對事物的看法沒有任何關系。
接下來的內容就是為了幫助大家弄清楚到底什么是無監督機器學習!
如果下面幾個概念都覺得有那么一點熟悉,那么后面的內容看的時候就不會覺得很難,無監督學習可能還會成為你的新朋友~
機器學習就是用實例來標記事物
如果你通過輸入你所尋找的問題的答案(輸入數據及其對應的標簽)來訓練你的系統,你正在進行監督式學習。
要開始監督學習,你需要知道你想要(給你輸入的數據貼上)什么標簽。(非監督式學習則不需要。)
標準術語包括實例(樣本)、特性、標簽、模型和算法。
▌什么是無監督式學習?
上面是六個實例,根據你自己喜歡的方式分成兩組。是不是覺得缺了點什么? 這些照片沒有任何的分類標簽。不過不用擔心,其實我們都很擅長這個任務—— 無監督學習。你可以思考一下,你會如何將這些圖片分成兩組,答案沒有對錯之分哦。
▌聚類數據
在一個課堂上,Google 的員工給出了一些答案如“坐著或站著”、“能看到木地板或不能看到”、“貓在自拍或貓不是在自拍”等等。讓我們來看一下第一個答案。
一種將圖像分成兩組的方法:坐vs站。嗯,“坐著”和站著。
▌無監督式學習的秘密標簽
如果您選擇根據貓是否站著來進行聚類,那么系統輸出是什么標簽? 畢竟,機器學習就是標記事物。
如果你認為“坐著還是站著”是標簽的話,這個就是您所用的聚類方法(模型)。其實無監督學習的標簽更無趣:類似于“第一組和第二組”或“A或B”或者“0或1”。它們只是簡單的表示群體成員,沒有其他認為解釋的含義。
無監督式學習的標簽只是簡單的表示聚類的成員。它們沒有更高的人類解讀的意義,有的只是令人失望的枯燥感。
這一切的完成都是借助算法根據相似性來對事物進行分組。相似度的度量是通過選擇算法來指定的,但是為什么不嘗試盡可能多的相似度度量呢? 因為你也不知道你在尋找什么,不過可以把非監督式學習看成是數學中的“物以類聚”。就像羅夏墨跡卡一樣,其實你不用把你看到的內容看的太重。
▌再來一次
作為這兩只貓的主人,我難過的是,在將近 50 次的教學中,只有一個人注意到他們應該被分類為“貓1和貓2”。大多數時候答案都是“坐著和站著”或“有無木地板”,有時甚至是“丑貓對漂亮的貓”。
這是我兩只貓的照片! 也許現在你已經注意到了,但大多數人都沒有注意到,除非我給他們貼上標簽(監督學習)。如果我一開始就給這些數據貼上了名字標簽,然后讓你給下一張照片分類,我打賭你會發現這個任務很簡單。
▌學習感悟
想象一下,假如我是一個剛入門學習數據科學的新手,還是剛開始學習非監督式學習,我對自己的兩只貓感興趣。當我看到這些圖片時,我不會對我的貓視若無睹。
十年之前,不能指望計算機與世界上最好的模式查找器——人腦去競爭這類任務。這些對人們來說很容易!可又是為什么那么多的 Google 員工看到了這些沒有標簽的照片并沒有得到“貓1與貓2”的答案呢?因為雖然一些東西對我們來說有趣卻并不意味著我們的模式查找器會發現它。即使這個模式查找器非常棒,我也沒有告訴它我要找的到底是什么。
那為什么我要期望我的學習算法能夠實現呢?這又不是魔術!如果我不告訴它正確答案是什么,那么得到什么答案是我不會失望的。我所做的就是查看系統為我計算的聚類,如果我不喜歡這個結果,我就會一遍又一遍地運行另一種無監督式算法(這個過程就像“觀眾席上的其他人在用其他的方式區分它們”)直到找到我覺得有趣滿意的為止。其實這也不能保證在這個過程中會有靈感啟發的事情發生,但嘗試一下也無妨。畢竟探索未知總是有一點冒險。
▌總結
無監督式學習通過把具有相似的事物分到一組而幫助你從數據中找到啟發。有許多不同的方法來定義相似度,所以在直到一個很酷的模式吸引你的眼球之前,要持續不斷的嘗試算法和設置!
無監督學習的實踐:探索世界美食之旅
▌背景
和很多人一樣,我也是超級熱愛美食的人。我很幸運在我的成長過程中,我們家里都是自己做飯,而我的媽媽負責為我們做出各種美食。因為她是從德國移民來了美國,所以我也接觸過很多美味的德國菜,其中我最喜歡的有雞蛋面, 水煮面粉球和酸味燉肉。雖然我不能說我繼承了我媽媽的廚藝天賦,但我也非常喜歡喜歡做飯,喜歡和我的家人們分享這個過程。
出于自己對美食的熱愛,我在想如果進行一個涉及世界各地美食的研究項目將會是一件很有趣的事情。我想看看我是否能從中了解到世界各 地不同美食間的關系。為了探索這個主題,我收集了超過12000種不同食譜的數據,這些食譜代表了25種不同的美食。然后,我通過使用自然語言處理技術將文本數據轉換為一種可以輸入機器學習算法中的格式。最后,我利用主成分分析(PCA)和主題建模來獲得數據的更深層面的理解。
▌收集數據
在我的項目中數據均來自于 Yummly,我獲得了他們的 API 授權。因此我可以直接從 ipython 上查詢和搜索菜譜。Yummly 支持基于菜肴類型進行搜索,以下是他們所支持的菜肴類型的列表:
美式料理,意大利料理,亞洲美食,墨西哥料理,南部和靈魂料理,法式料理,西南部美食,燒烤,印度料理,中國料理,路易斯安娜州和克里奧爾料理,英國料理,地中海部分美食,希臘美食,西班牙料理,德國美食,泰國美食 ,摩洛哥料理,愛爾蘭美食,日本料理,古巴美食,夏威夷美食,瑞典美食,匈牙利美食,葡萄牙美食。
我下載了25種菜系,每個菜系都有將近500份的食譜,總共下載了將近12500不同的食譜。關于數據收集, 我使用了 Requests 庫進行讀取數據,以及內置JSON編碼器將數據轉換為python字典。然后,再將數據轉換成PandasDataFrame, 這個就相對簡單了。如下面顯示,在我的分析中,我只使用了對應于烹飪和配料的列而忽略了其他列。
所選的Yummly食譜的數據列
▌文本數據處理和機器學習工作流程
由于數據只包含文本,因此有必要使用自然語言處理技術實現一些預處理步驟。包括的步驟如下:
1.連接某些成分(如:橄欖油、玉米淀粉)
2.將成分分解成單詞列表
3.刪除停止詞和其他經常出現的詞(如鹽、胡椒、水)
4.刪除詞尾的復數形式和其他后綴
5.詞庫處理,創建一個稀疏矩陣,包含成分列表中的所有詞以及它們出現的頻率
用來實現這些步驟的工具包括在sklearn 中找到的 TfidfVectorizer 和 CountVectorizer。其中還有一些步驟,比如連字符和停止字刪除,是我自己編寫的代碼來實現的,可以在 GitHub 上看到相關的代碼。
在項目中我使用了機器學習的無監督算法,嘗試做 K-Means 聚類,來確定是否可以根據烹飪類型將菜譜組合在一起,但是我發現聚類對我的分析并不是很有幫助,因為不清楚不同的聚類代表了什么。之后我將注意力集中在主成分分析(PCA)和主題生成模型(LDA)上,更多的結果分析接下來和大家一起討論和分享。
▌結果分析
為了對數據進行可視化,需要先進行降維操作,從1982維的特征空間減少到2維,通過PCA保留前兩個主成分。然后我針對主成分創建了一個散點圖,如下所示。
包含關于第一個和第二個主成分分析的所有12492份食譜的散點圖
在繪制所有食譜的主成分散點圖的過程中,因為許多數據點是重疊的,所以很難在數據中看到任何結構。然而,通過根據菜肴對食譜進行分組,并沿著兩個主要成分取中間值,我可以在數據中看到一些有趣的結構。如下圖所示。
在第一和第二主成分上的每一種不同菜系的中心值的圖。(A)組與亞洲菜系相關,(B)組由日本和夏威夷菜系組成,(C)組與(D)組分別是歐美菜系。Group (E)是一種來自世界各地的美食,包括古巴、墨西哥、印度和西班牙。
上面的圖提供了一些關于不同菜肴關系的有趣的深層分析。我們可以觀察到散點圖的中心值往往傾向于類似的美食菜譜類型。例如,圖2中的A組包括中國、泰國和亞洲料理,它們都可以歸類為亞洲食品。B組由日本和夏威夷料理組成。這兩種菜系都非常強調魚,所以它們被緊密地聯系在一起是有道理的。C組完全由歐洲菜組成,如瑞典菜、法國菜和德國菜,不遠處的D組主要由北美菜組成。這些包括南美美食,烤肉和傳統的美式料理。最后,E組是一個混合了來自世界各地的不同菜系的集合。這包括古巴,墨西哥,印度,西班牙和西南部美食。當我想到這些菜系時,我想到的是大和大膽的味道,所以這些菜系會被緊密地組合在一起,也是完全合理的。
讀者可能會問的一個問題是,哪些特性(成分)與第一和第二主成分的聯系最為緊密? 這可以在下圖中看到。
顯示了與第一和第二主要成分聯系最緊密的成分
這個圖提供另兩個主成分中每一個主要特征的直觀表示。雞肉、大蒜、洋蔥和西紅柿等原料在成分一的正方向上有很強的聯系。這些口味與西班牙或印度的菜肴有著緊密的聯系。另一方面,雞蛋、黃油、面粉、牛奶和糖在成分一的反方向上有很強的聯系。這些都是法國或英國菜肴中常見的配料。同樣,大豆、醬油和大米與第二主成分的正方向有著很強的聯系。這些食材在亞洲菜系中很常見。最后,芝士、檸檬、橄欖油和番茄與成分二的負極有很強的聯系。這些味道在意大利和希臘菜中很常見。這個圖有助于解讀前一個圖,即為什么在沿著第一個和第二個主成分繪制散點圖時,某些菜系會聚集在特定的區域。
最后,我還運行了一個主題生成模型來進行主題建模。我很好奇是否能夠根據不同的菜肴來區分不同的食材。我指定主題的數量為 25,因為在我的數據集中共有 25 種不同的菜系。然而,主題生成模型給出的的結果有點混亂。在某些情況下,LDA給出的主題是特定的菜系,如意大利菜或泰國菜。然而,有些主題卻是不同種類的菜品,如甜點、醬汁,甚至是雞尾酒。雖然這個結果不是我想要的,但回想起來,它還是很有意義的。LDA是一種機器學習技術,可以識別經常出現在一起的單詞組。所以,在超過12000個食譜的語料庫中,菜品的類型(如甜點、湯、沙拉或醬料)可能比菜系的類型會有更強的關聯。
主題生成模型 LDA 給出的結果
▌實踐感悟
在探索食譜數據集的過程中我得到了很多樂趣,因為我喜歡將我對食物的熱愛與我學習的新技能結合起來。另外我們還可以根據這種分析提供一個優秀的商業案例,這些信息可以用來為Yummly平臺的用戶提供美食建議。例如,一個非常喜歡燒烤的人可能也會很喜歡葡萄牙美食,因為這兩種不同的美食的第一和第二主成分的散點圖中心重疊。類似這樣的關系如果沒有對這些數據進行深入的探索是無法得知的。
但是在這里我還要另外聲明一件重要的事,在這個項目研究中使用的數據也是存在一定缺點的。例如,Yummly基本上是一個匯集了許多其它菜譜網站或博客的英語網站。因此,這些食譜中很多可能是美國人對其他美食類型的看法。我敢肯定我的意大利朋友們會說,把雞肉和香蒜醬混合在一起的美食“不是意大利菜!”但Yummly還是把這道菜譜標記為了意大利菜。解決這個問題的一個很好的辦法是利用他們的母語食譜,使用一些高級的翻譯算法將它們翻譯成英語。然而,由于某些成分可能對特定的地理位置具有特定性,也可能也會導致一些其他的問題。例如,某些配料在英語中可能沒有對應的名稱(例如,意大利熏火腿、帕爾瑪干酪),因此這些配料將永遠與意大利美食聯系在一起,這可能會減少不同菜系之間的相似點,但我仍然認為這是值得探索的。
-
數據
+關注
關注
8文章
7030瀏覽量
89036 -
聚類
+關注
關注
0文章
146瀏覽量
14214 -
機器學習
+關注
關注
66文章
8418瀏覽量
132635
原文標題:家里有兩只貓給挖坑,還有世界美食的誘惑,我就被無監督學習徹底收服了!
文章出處:【微信號:AI_Thinker,微信公眾號:人工智能頭條】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論