客戶案例
政府網站
企業網站
微信服務
微信平台

人(rén)人(rén)都能讀懂的(de)無監督學習:什麽是(shì)聚類和(hé / huò)降維?

時(shí)間:2017-08-31 來(lái)源:36氪

機器學習已經成爲(wéi / wèi)了(le/liǎo)改變時(shí)代的(de)大(dà)事,一(yī / yì /yí)時(shí)間似乎人(rén)人(rén)都應該懂一(yī / yì /yí)點機器學習。但機器學習涉及到(dào)的(de)數學知識和(hé / huò)編程能力往往讓沒有相關經驗的(de)人(rén)望而(ér)卻步。

YupTechnologies 機器學習專家 Vishal Maini 近日在(zài) Medium 上(shàng)發布了(le/liǎo)一(yī / yì /yí)個(gè)介紹機器學習的(de)系列文章《人(rén)人(rén)讀得懂的(de)機器學習(Machine Learning for Humans)》,用普通人(rén)能理解的(de)語言對機器學習領域的(de)一(yī / yì /yí)些核心概念進行了(le/liǎo)闡述。機器之(zhī)心在(zài)這(zhè)裏編譯了(le/liǎo)這(zhè)一(yī / yì /yí)系列文章的(de)第三部分「無監督學習」,對主要(yào / yāo)的(de)聚類和(hé / huò)降維算法進行了(le/liǎo)介紹,其中包括 K 均值聚類、層次聚類、主成分分析(PCA)和(hé / huò)奇異值分解(SVD)。

我們可以(yǐ)怎樣發現一(yī / yì /yí)個(gè)數據集的(de)底層結構?我們可以(yǐ)怎樣最有用地(dì / de)對其進行歸納和(hé / huò)分組?我們可以(yǐ)怎樣以(yǐ)一(yī / yì /yí)種壓縮格式有效地(dì / de)表征數據?這(zhè)都是(shì)無監督學習的(de)目标,之(zhī)所以(yǐ)稱之(zhī)爲(wéi / wèi)「無監督」,是(shì)因爲(wéi / wèi)這(zhè)是(shì)從無标簽的(de)數據開始學習的(de)。

我們将在(zài)這(zhè)裏探索的(de)兩種無監督學習任務是(shì):1)将數據按相似度聚類(clustering)成不(bù)同的(de)分組;2)降維(reducing dimensionality),以(yǐ)便在(zài)保留數據結構和(hé / huò)有用性的(de)同時(shí)對數據進行壓縮。

無監督學習方法可能有用的(de)案例:

  • 一(yī / yì /yí)家廣告平台需要(yào / yāo)根據相似的(de)人(rén)口學特征和(hé / huò)購買習慣将美國(guó)人(rén)口分成不(bù)同的(de)小組,以(yǐ)便廣告客戶可以(yǐ)通過有關聯的(de)廣告接觸到(dào)他(tā)們的(de)目标客戶。

  • Airbnb 需要(yào / yāo)将自己的(de)房屋清單分組成不(bù)同的(de)社區,以(yǐ)便用戶能更輕松地(dì / de)查閱這(zhè)些清單。

  • 一(yī / yì /yí)個(gè)數據科學團隊需要(yào / yāo)降低一(yī / yì /yí)個(gè)大(dà)型數據集的(de)維度的(de)數量,以(yǐ)便簡化建模和(hé / huò)降低文件大(dà)小。

和(hé / huò)監督學習不(bù)同,要(yào / yāo)找到(dào)評價無監督學習算法優劣的(de)指标可并不(bù)輕松。「表現水平」往往是(shì)主觀的(de),而(ér)且因領域不(bù)同而(ér)各不(bù)相同。

聚類

聚類的(de)一(yī / yì /yí)個(gè)有趣的(de)真實應用案例是(shì)營銷數據提供商 Acxiom 的(de)人(rén)生階段聚類系統 Personicx。這(zhè)項服務将美國(guó)家庭分成了(le/liǎo) 70 個(gè)不(bù)同的(de)聚類,它們分屬于(yú) 21 個(gè)人(rén)生階段分組,可以(yǐ)被廣告主用于(yú)投放定向 Facebook 廣告、陳列式廣告和(hé / huò)直郵廣告等。

人(rén)人(rén)都能讀懂的(de)無監督學習:什麽是(shì)聚類和(hé / huò)降維?

Personix 人(rén)口學特征聚類的(de)一(yī / yì /yí)部分

他(tā)們的(de)白皮書表明他(tā)們使用了(le/liǎo)重心聚類(centroid clustering)和(hé / huò)主成分分析,這(zhè)兩種技術在(zài)這(zhè)一(yī / yì /yí)節都有覆蓋。

你可以(yǐ)想象,如果廣告主想(1)理解他(tā)們已有的(de)客戶群,(2)通過相關的(de)人(rén)口學特征、興趣和(hé / huò)生活習慣向潛在(zài)新客戶投放定向廣告以(yǐ)便高效利用廣告開支,那麽這(zhè)些聚類将對他(tā)們非常有用。

人(rén)人(rén)都能讀懂的(de)無監督學習:什麽是(shì)聚類和(hé / huò)降維?

實際上(shàng),你隻需要(yào / yāo)在(zài) Acxiom 的(de)「我屬于(yú)哪個(gè)聚類?」工具中回答幾個(gè)簡單問題,你就(jiù)能知道(dào)你個(gè)人(rén)屬于(yú)哪個(gè)聚類,體驗地(dì / de)址:https://isapps.acxiom.com/personicx/personicx.aspx

讓我們了(le/liǎo)解幾種聚類方法,看看這(zhè)樣的(de)任務是(shì)如何完成的(de)。

K 均值聚類

「重心之(zhī)賽有 k 個(gè)魔戒,在(zài)那之(zhī)上(shàng),是(shì)希望的(de)力量。」

聚類的(de)目标是(shì)爲(wéi / wèi)數據點分組,使得不(bù)同聚類中的(de)數據點是(shì)不(bù)相似的(de),同一(yī / yì /yí)聚類中的(de)數據點則是(shì)類似的(de)。

使用 K 均值聚類,我們希望将我們的(de)數據點聚類爲(wéi / wèi) K 組。K 更大(dà)時(shí),創造的(de)分組就(jiù)更小,就(jiù)有更多粒度;K 更小時(shí),則分組就(jiù)更大(dà),粒度更少。

該算法的(de)輸出(chū)是(shì)一(yī / yì /yí)組「标簽」,這(zhè)些标簽将每個(gè)數據點都分配到(dào)了(le/liǎo) K 組中的(de)一(yī / yì /yí)組。在(zài) K 均值聚類中,這(zhè)些組的(de)定義方式是(shì)爲(wéi / wèi)每個(gè)組創造一(yī / yì /yí)個(gè)重心(centroid)。這(zhè)些重心就(jiù)像是(shì)聚類的(de)心髒,它們可以(yǐ)「捕獲」離自己最近的(de)點并将其加入到(dào)自己的(de)聚類中。

你可以(yǐ)把這(zhè)些重心看作是(shì)派對上(shàng)成爲(wéi / wèi)關注焦點的(de)人(rén),他(tā)們就(jiù)像是(shì)有磁性一(yī / yì /yí)樣。如果隻有一(yī / yì /yí)個(gè)這(zhè)樣的(de)人(rén),每個(gè)人(rén)都會圍繞在(zài)他(tā)周圍;如果有很多這(zhè)樣的(de)人(rén),就(jiù)會形成很多更小一(yī / yì /yí)點的(de)活動中心。

K 均值聚類的(de)步驟如下:

  • 定義 K 個(gè)重心。一(yī / yì /yí)開始這(zhè)些重心是(shì)随機的(de)(也(yě)有一(yī / yì /yí)些更加有效的(de)用于(yú)初始化重心的(de)算法)

  • 尋找最近的(de)重心并且更新聚類分配。将每個(gè)數據點都分配給這(zhè) K 個(gè)聚類中的(de)一(yī / yì /yí)個(gè)。每個(gè)數據點都被分配給離它們最近的(de)重心的(de)聚類。這(zhè)裏的(de)「接近程度」的(de)度量是(shì)一(yī / yì /yí)個(gè)超參數——通常是(shì)歐幾裏得距離(Euclidean distance)。

  • 将重心移動到(dào)它們的(de)聚類的(de)中心。每個(gè)聚類的(de)重心的(de)新位置是(shì)通過計算該聚類中所有數據點的(de)平均位置得到(dào)的(de)。

重複第 2 和(hé / huò) 3 步,直到(dào)每次叠代時(shí)重心的(de)位置不(bù)再顯著變化(即直到(dào)該算法收斂)。

這(zhè)就(jiù)是(shì) K 均值聚類工作方式的(de)精簡版!該算法的(de)可視化演示可在(zài)這(zhè)裏查看:https://www.naftaliharris.com/blog/visualizing-k-means-clustering/,你可以(yǐ)像讀漫畫一(yī / yì /yí)樣理解。平面上(shàng)的(de)每個(gè)數據點都根據離自己最近的(de)重心加了(le/liǎo)顔色。你可以(yǐ)看到(dào)這(zhè)些重心(更大(dà)一(yī / yì /yí)點的(de)藍點、紅點和(hé / huò)綠點)一(yī / yì /yí)開始是(shì)随機的(de),然後很快進行了(le/liǎo)調整,得到(dào)了(le/liǎo)它們各自的(de)聚類。

人(rén)人(rén)都能讀懂的(de)無監督學習:什麽是(shì)聚類和(hé / huò)降維?

K 均值聚類的(de)另一(yī / yì /yí)個(gè)真實應用是(shì)分類手寫數字。假設我們有用像素亮度的(de)長向量表示的(de)數字的(de)圖像。假設這(zhè)些圖像是(shì)黑白兩色的(de),大(dà)小爲(wéi / wèi) 64×64 像素。每個(gè)像素代表一(yī / yì /yí)個(gè)維度。那麽這(zhè)些圖像就(jiù)生活在(zài)一(yī / yì /yí)個(gè)有 64×64=4096 個(gè)維度的(de)世界裏。

在(zài)這(zhè)個(gè) 4096 維的(de)世界裏,K 均值聚類讓我們可以(yǐ)按接近程度對這(zhè)些圖像分組,并且假設這(zhè)些靠得很近的(de)圖像都是(shì)同一(yī / yì /yí)個(gè)數字。這(zhè)種算法可以(yǐ)在(zài)數字識别上(shàng)得到(dào)相當好的(de)結果,參閱:http://ieeexplore.ieee.org/document/6755106/?reload=true

層次聚類

「讓我們把 100 萬個(gè)選項變成 7 個(gè)選項。或者 5 個(gè)。或者 20 個(gè)?呃,我們可以(yǐ)過會兒決定。」

層次聚類類似于(yú)常規的(de)聚類,隻是(shì)你的(de)目标是(shì)構建一(yī / yì /yí)個(gè)聚類的(de)層次。如果你最終的(de)聚類數量不(bù)确定,那這(zhè)種方法會非常有用。比如說(shuō),假設要(yào / yāo)給 Etsy 或亞馬遜等網絡市場上(shàng)的(de)項目分組。在(zài)主頁上(shàng),你隻需要(yào / yāo)少量大(dà)組方便導航,但随着你的(de)分類越來(lái)越特定,你需要(yào / yāo)的(de)粒度水平也(yě)越來(lái)越大(dà),即區别更加明顯的(de)項聚類。

在(zài)算法的(de)輸出(chū)方面,除了(le/liǎo)聚類分配,你也(yě)需要(yào / yāo)構建一(yī / yì /yí)個(gè)很好的(de)樹結構,以(yǐ)幫助你了(le/liǎo)解這(zhè)些聚類之(zhī)間的(de)層次結構。然後你可以(yǐ)從這(zhè)個(gè)樹中選擇你希望得到(dào)的(de)聚類數量。

層次聚類的(de)步驟如下:

  • 首先從 N 個(gè)聚類開始,每個(gè)數據點一(yī / yì /yí)個(gè)聚類。

  • 将彼此靠得最近的(de)兩個(gè)聚類融合爲(wéi / wèi)一(yī / yì /yí)個(gè)。現在(zài)你有 N-1 個(gè)聚類。

  • 重新計算這(zhè)些聚類之(zhī)間的(de)距離。有很多可以(yǐ)辦到(dào)這(zhè)件事的(de)方法(參見這(zhè)個(gè)教程了(le/liǎo)解更多細節:https://home.deib.polimi.it/matteucc/Clustering/tutorial_html/hierarchical.html)。其中一(yī / yì /yí)種方法(平均連接聚類,average-linkage clustering)是(shì)将兩個(gè)聚類之(zhī)間的(de)距離看作是(shì)它們各自元素之(zhī)間所有距離的(de)平均。

  • 重複第 2 和(hé / huò) 3 步,直到(dào)你得到(dào)包含 N 個(gè)數據點的(de)一(yī / yì /yí)個(gè)聚類。你就(jiù)會得到(dào)如下圖所示的(de)樹(也(yě)被稱爲(wéi / wèi)樹狀圖))。

  • 選擇一(yī / yì /yí)個(gè)聚類數量,然後在(zài)這(zhè)個(gè)樹狀圖中劃一(yī / yì /yí)條水平線。比如說(shuō),如果你想要(yào / yāo) K=2 個(gè)聚類,你應該在(zài)距離大(dà)約爲(wéi / wèi) 20000 的(de)位置畫一(yī / yì /yí)條水平線,你會得到(dào)一(yī / yì /yí)個(gè)包含數據點 8、9、11、16 的(de)聚類和(hé / huò)包含其它數據點的(de)另一(yī / yì /yí)個(gè)聚類。一(yī / yì /yí)般而(ér)言,你得到(dào)的(de)聚類的(de)數量就(jiù)是(shì)水平線與樹狀圖中的(de)豎直線的(de)交叉點的(de)數量。

人(rén)人(rén)都能讀懂的(de)無監督學習:什麽是(shì)聚類和(hé / huò)降維?

更多有關層次聚類的(de)詳細信息,可參閱這(zhè)個(gè)視頻:https://www.youtube.com/watch?v=OcoE7JlbXvY

降維

「對于(yú)那些該砍去的(de)非精髓部分的(de)态度,并不(bù)是(shì)每天增加吸收,而(ér)是(shì)每日盡量排減。」——李小龍

降維看上(shàng)去很像壓縮。這(zhè)是(shì)爲(wéi / wèi)了(le/liǎo)在(zài)盡可能保存相關的(de)結構的(de)同時(shí)降低數據的(de)複雜度。如果你有一(yī / yì /yí)張簡單的(de) 128×128×3 像素的(de)圖像(長×寬×RGB 值),那麽數據就(jiù)有 49152 維。如果你可以(yǐ)給這(zhè)個(gè)圖像空間降維,同時(shí)又不(bù)毀掉圖像中太多有意義的(de)内容,那麽你就(jiù)很好地(dì / de)執行了(le/liǎo)降維。

我們将了(le/liǎo)解兩種實際中很常用的(de)降維技術:主成分分析和(hé / huò)奇異值分解。

主成分分析(PCA)

首先,了(le/liǎo)解一(yī / yì /yí)點線性代數知識——看看空間(space)和(hé / huò)基(base)。

你應該知道(dào)由原點 O(0,0) 和(hé / huò)基向量 i(1,0) 與 j(0,1) 定義的(de)坐标平面。事實上(shàng),你也(yě)可以(yǐ)選擇一(yī / yì /yí)個(gè)完全不(bù)同的(de)基礎,其中的(de)數學仍然有效。比如說(shuō),你可以(yǐ)保持原點仍然爲(wéi / wèi) O,但選擇 i'=(2,1) 和(hé / huò) j'=(1,2) 作爲(wéi / wèi)基向量。如果你有耐心計算一(yī / yì /yí)下,你會發現在(zài) i', j' 坐标系統中标記爲(wéi / wèi) (2,2) 的(de)點在(zài) i, j 系統标記爲(wéi / wèi) (6, 6)。

人(rén)人(rén)都能讀懂的(de)無監督學習:什麽是(shì)聚類和(hé / huò)降維?

使用 Mathisfun 的(de)「交互式笛卡爾坐标」繪制:https://www.mathsisfun.com/data/cartesian-coordinates-interactive.html

這(zhè)意味着我們可以(yǐ)修改空間的(de)基礎。現在(zài)想象有更高維度的(de)空間,比如有 5 萬維。你可以(yǐ)爲(wéi / wèi)這(zhè)個(gè)空間選擇一(yī / yì /yí)個(gè)基礎,然後根據這(zhè)個(gè)基礎僅選擇 200 個(gè)最重要(yào / yāo)的(de)向量。這(zhè)些基向量被稱爲(wéi / wèi)主成分,而(ér)且你可以(yǐ)選擇其中一(yī / yì /yí)個(gè)子(zǐ)集構成一(yī / yì /yí)個(gè)新空間,它的(de)維度比原來(lái)的(de)空間少,但又保留了(le/liǎo)盡可能多的(de)數據複雜度。

要(yào / yāo)選擇出(chū)最重要(yào / yāo)的(de)主成分,我們需要(yào / yāo)檢查這(zhè)些數據的(de)方差,并按這(zhè)個(gè)指标給它們排序。

理解 PCA 的(de)另一(yī / yì /yí)個(gè)思路是(shì) PCA 将我們數據中存在(zài)的(de)空間重映射成了(le/liǎo)一(yī / yì /yí)個(gè)更加緊湊的(de)空間。這(zhè)種變換後的(de)維度比原來(lái)的(de)維度更小。

僅需使用重映射空間的(de)前幾個(gè)維度,我們就(jiù)可以(yǐ)開始理解這(zhè)個(gè)數據集的(de)組織結構。這(zhè)就(jiù)是(shì)降維的(de)目的(de):減少複雜度(即這(zhè)裏的(de)維度),同時(shí)保留結構(方差)。這(zhè)裏有篇 Samer 寫的(de)論文,介紹了(le/liǎo)使用 PCA(以(yǐ)及擴散映射等技術)試圖理解維基解密披露的(de)電報:http://mou3amalet.com/cargocollective/675_xuesabri-final.pdf

奇異值分解(SVD)

假設我們将我們的(de)數據表示成一(yī / yì /yí)個(gè) A=m×n 的(de)大(dà)型矩陣。SVD 讓我們可以(yǐ)将這(zhè)個(gè)大(dà)型矩陣分解成 3 個(gè)較小的(de)矩陣的(de)乘積;這(zhè) 3 個(gè)矩陣分别是(shì) U=m x r、對角矩陣 Σ=r x r、V=r x n,其中 r 是(shì)一(yī / yì /yí)個(gè)很小的(de)值。

人(rén)人(rén)都能讀懂的(de)無監督學習:什麽是(shì)聚類和(hé / huò)降維?

在(zài)這(zhè)個(gè) r×r 的(de)對角矩陣 Σ 中的(de)值被稱爲(wéi / wèi)奇異值。這(zhè)些值的(de)奇妙之(zhī)處是(shì)可以(yǐ)被用于(yú)壓縮原來(lái)的(de)矩陣,如果你丢棄奇異值中最小的(de) 20% 以(yǐ)及矩陣 U 和(hé / huò) V 中相關的(de)列,你就(jiù)可以(yǐ)節省大(dà)量空間,同時(shí)仍然能很好地(dì / de)表征原來(lái)的(de)矩陣。

爲(wéi / wèi)了(le/liǎo)更準确地(dì / de)了(le/liǎo)解其中的(de)含義,我們來(lái)看看一(yī / yì /yí)張小狗的(de)圖片:

人(rén)人(rén)都能讀懂的(de)無監督學習:什麽是(shì)聚類和(hé / huò)降維?

我們将使用 Andrew Gibiansky 寫的(de)關于(yú) SVD 的(de)文章中代碼:http://andrew.gibiansky.com/blog/mathematics/cool-linear-algebra-singular-value-decomposition/。首先,我們發現如果我們根據大(dà)小排序這(zhè)些奇異值(矩陣 Σ 的(de)值),那麽前 50 個(gè)奇異值将包含整個(gè)矩陣 Σ 的(de)大(dà)小的(de) 85%。

人(rén)人(rén)都能讀懂的(de)無監督學習:什麽是(shì)聚類和(hé / huò)降維?

根據這(zhè)個(gè)事實,我們可以(yǐ)丢棄後面的(de) 250 個(gè)值(即将它們設爲(wéi / wèi) 0),僅保留這(zhè)張小狗圖像的(de)「rank(秩)50」版本。這(zhè)裏,我們創建了(le/liǎo)秩爲(wéi / wèi) 200、100、50、30、20、10 和(hé / huò) 3 的(de)小狗照片。顯然,照片變小了(le/liǎo)。但假設我們認爲(wéi / wèi)秩爲(wéi / wèi) 30 的(de)小狗仍然很好,現在(zài)讓我們看看我們實現了(le/liǎo)多少壓縮。

原先的(de)圖像矩陣有 305*275 = 83,875 個(gè)值,秩爲(wéi / wèi) 30 的(de)圖像則有 305*30+30+30*275=17,430 個(gè)值。值的(de)數量差不(bù)多少了(le/liǎo) 5 倍,但質量卻下降很少。上(shàng)述計算的(de)原因是(shì)當我們執行 UΣ'V 運算時(shí),U 和(hé / huò) V 矩陣中的(de)一(yī / yì /yí)部分因爲(wéi / wèi)乘 0 也(yě)被丢棄(其中 Σ' 是(shì) Σ 的(de)修改後版本,其中僅包含了(le/liǎo)前面的(de) 30 個(gè)值)。

人(rén)人(rén)都能讀懂的(de)無監督學習:什麽是(shì)聚類和(hé / huò)降維?

無監督學習常常被用于(yú)數據預處理。一(yī / yì /yí)般而(ér)言,這(zhè)意味着以(yǐ)某種平均-保留的(de)方式壓縮數據,比如 PCA 或 SVD;之(zhī)後,這(zhè)些數據可被用于(yú)深度神經網絡或其它監督式學習算法。

轉載36氪:http://36kr.com/p/5090797.html