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

基于半監(jiān)督學(xué)習(xí)的跌倒檢測系統(tǒng)設(shè)計_李仲年
基于半監(jiān)督學(xué)習(xí)框架的識別算法
利用機器學(xué)習(xí)來捕捉內(nèi)部漏洞的工具運用無監(jiān)督學(xué)習(xí)方法可發(fā)現(xiàn)入侵者
你想要的機器學(xué)習(xí)課程筆記在這:主要討論監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)
如何用Python進行無監(jiān)督學(xué)習(xí)
無監(jiān)督機器學(xué)習(xí)如何保護金融
機器學(xué)習(xí)算法中有監(jiān)督和無監(jiān)督學(xué)習(xí)的區(qū)別
最基礎(chǔ)的半監(jiān)督學(xué)習(xí)
半監(jiān)督學(xué)習(xí)最基礎(chǔ)的3個概念

為什么半監(jiān)督學(xué)習(xí)是機器學(xué)習(xí)的未來?
半監(jiān)督學(xué)習(xí):比監(jiān)督學(xué)習(xí)做的更好
機器學(xué)習(xí)中的無監(jiān)督學(xué)習(xí)應(yīng)用在哪些領(lǐng)域

自監(jiān)督學(xué)習(xí)的一些思考

評論