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

人人都(dōu)能(néng)讀懂的無監督學(xué)習:什麼(me)是聚類和降維?

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

機器學(xué)習已經(jīng)成(chéng)爲了改變時(shí)代的大事(shì),一時(shí)間似乎人人都(dōu)應該懂一點機器學(xué)習。但機器學(xué)習涉及到的數學(xué)知識和編程能(néng)力往往讓沒(méi)有相關經(jīng)驗的人望而卻步。

YupTechnologies 機器學(xué)習專家 Vishal Maini 近日在 Medium 上發(fā)布了一個介紹機器學(xué)習的系列文章《人人讀得懂的機器學(xué)習(Machine Learning for Humans)》,用普通人能(néng)理解的語言對(duì)機器學(xué)習領域的一些核心概念進(jìn)行了闡述。機器之心在這(zhè)裡(lǐ)編譯了這(zhè)一系列文章的第三部分「無監督學(xué)習」,對(duì)主要的聚類和降維算法進(jìn)行了介紹,其中包括 K 均值聚類、層次聚類、主成(chéng)分分析(PCA)和奇異值分解(SVD)。

我們可以怎樣發(fā)現一個數據集的底層結構?我們可以怎樣最有用地對(duì)其進(jìn)行歸納和分組?我們可以怎樣以一種(zhǒng)壓縮格式有效地表征數據?這(zhè)都(dōu)是無監督學(xué)習的目标,之所以稱之爲「無監督」,是因爲這(zhè)是從無标簽的數據開(kāi)始學(xué)習的。

我們將(jiāng)在這(zhè)裡(lǐ)探索的兩(liǎng)種(zhǒng)無監督學(xué)習任務是:1)將(jiāng)數據按相似度聚類(clustering)成(chéng)不同的分組;2)降維(reducing dimensionality),以便在保留數據結構和有用性的同時(shí)對(duì)數據進(jìn)行壓縮。

無監督學(xué)習方法可能(néng)有用的案例:

  • 一家廣告平台需要根據相似的人口學(xué)特征和購買習慣將(jiāng)美國(guó)人口分成(chéng)不同的小組,以便廣告客戶可以通過(guò)有關聯的廣告接觸到他們的目标客戶。

  • Airbnb 需要將(jiāng)自己的房屋清單分組成(chéng)不同的社區,以便用戶能(néng)更輕松地查閱這(zhè)些清單。

  • 一個數據科學(xué)團隊需要降低一個大型數據集的維度的數量,以便簡化建模和降低文件大小。

和監督學(xué)習不同,要找到評價無監督學(xué)習算法優劣的指标可并不輕松。「表現水平」往往是主觀的,而且因領域不同而各不相同。

聚類

聚類的一個有趣的真實應用案例是營銷數據提供商 Acxiom 的人生階段聚類系統 Personicx。這(zhè)項服務將(jiāng)美國(guó)家庭分成(chéng)了 70 個不同的聚類,它們分屬于 21 個人生階段分組,可以被廣告主用于投放定向(xiàng) Facebook 廣告、陳列式廣告和直郵廣告等。

人人都(dōu)能(néng)讀懂的無監督學(xué)習:什麼(me)是聚類和降維?

Personix 人口學(xué)特征聚類的一部分

他們的白皮書表明他們使用了重心聚類(centroid clustering)和主成(chéng)分分析,這(zhè)兩(liǎng)種(zhǒng)技術在這(zhè)一節都(dōu)有覆蓋。

你可以想象,如果廣告主想(1)理解他們已有的客戶群,(2)通過(guò)相關的人口學(xué)特征、興趣和生活習慣向(xiàng)潛在新客戶投放定向(xiàng)廣告以便高效利用廣告開(kāi)支,那麼(me)這(zhè)些聚類將(jiāng)對(duì)他們非常有用。

人人都(dōu)能(néng)讀懂的無監督學(xué)習:什麼(me)是聚類和降維?

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

讓我們了解幾種(zhǒng)聚類方法,看看這(zhè)樣的任務是如何完成(chéng)的。

K 均值聚類

「重心之賽有 k 個魔戒,在那之上,是希望的力量。」

聚類的目标是爲數據點分組,使得不同聚類中的數據點是不相似的,同一聚類中的數據點則是類似的。

使用 K 均值聚類,我們希望將(jiāng)我們的數據點聚類爲 K 組。K 更大時(shí),創造的分組就(jiù)更小,就(jiù)有更多粒度;K 更小時(shí),則分組就(jiù)更大,粒度更少。

該算法的輸出是一組「标簽」,這(zhè)些标簽將(jiāng)每個數據點都(dōu)分配到了 K 組中的一組。在 K 均值聚類中,這(zhè)些組的定義方式是爲每個組創造一個重心(centroid)。這(zhè)些重心就(jiù)像是聚類的心髒,它們可以「捕獲」離自己最近的點并將(jiāng)其加入到自己的聚類中。

你可以把這(zhè)些重心看作是派對(duì)上成(chéng)爲關注焦點的人,他們就(jiù)像是有磁性一樣。如果隻有一個這(zhè)樣的人,每個人都(dōu)會(huì)圍繞在他周圍;如果有很多這(zhè)樣的人,就(jiù)會(huì)形成(chéng)很多更小一點的活動中心。

K 均值聚類的步驟如下:

  • 定義 K 個重心。一開(kāi)始這(zhè)些重心是随機的(也有一些更加有效的用于初始化重心的算法)

  • 尋找最近的重心并且更新聚類分配。將(jiāng)每個數據點都(dōu)分配給這(zhè) K 個聚類中的一個。每個數據點都(dōu)被分配給離它們最近的重心的聚類。這(zhè)裡(lǐ)的「接近程度」的度量是一個超參數——通常是歐幾裡(lǐ)得距離(Euclidean distance)。

  • 將(jiāng)重心移動到它們的聚類的中心。每個聚類的重心的新位置是通過(guò)計算該聚類中所有數據點的平均位置得到的。

重複第 2 和 3 步,直到每次叠代時(shí)重心的位置不再顯著變化(即直到該算法收斂)。

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

人人都(dōu)能(néng)讀懂的無監督學(xué)習:什麼(me)是聚類和降維?

K 均值聚類的另一個真實應用是分類手寫數字。假設我們有用像素亮度的長(cháng)向(xiàng)量表示的數字的圖像。假設這(zhè)些圖像是黑白兩(liǎng)色的,大小爲 64×64 像素。每個像素代表一個維度。那麼(me)這(zhè)些圖像就(jiù)生活在一個有 64×64=4096 個維度的世界裡(lǐ)。

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

層次聚類

「讓我們把 100 萬個選項變成(chéng) 7 個選項。或者 5 個。或者 20 個?呃,我們可以過(guò)會(huì)兒決定。」

層次聚類類似于常規的聚類,隻是你的目标是構建一個聚類的層次。如果你最終的聚類數量不确定,那這(zhè)種(zhǒng)方法會(huì)非常有用。比如說(shuō),假設要給 Etsy 或亞馬遜等網絡市場上的項目分組。在主頁上,你隻需要少量大組方便導航,但随著(zhe)你的分類越來越特定,你需要的粒度水平也越來越大,即區别更加明顯的項聚類。

在算法的輸出方面(miàn),除了聚類分配,你也需要構建一個很好(hǎo)的樹結構,以幫助你了解這(zhè)些聚類之間的層次結構。然後(hòu)你可以從這(zhè)個樹中選擇你希望得到的聚類數量。

層次聚類的步驟如下:

  • 首先從 N 個聚類開(kāi)始,每個數據點一個聚類。

  • 將(jiāng)彼此靠得最近的兩(liǎng)個聚類融合爲一個。現在你有 N-1 個聚類。

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

  • 重複第 2 和 3 步,直到你得到包含 N 個數據點的一個聚類。你就(jiù)會(huì)得到如下圖所示的樹(也被稱爲樹狀圖))。

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

人人都(dōu)能(néng)讀懂的無監督學(xué)習:什麼(me)是聚類和降維?

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

降維

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

降維看上去很像壓縮。這(zhè)是爲了在盡可能(néng)保存相關的結構的同時(shí)降低數據的複雜度。如果你有一張簡單的 128×128×3 像素的圖像(長(cháng)×寬×RGB 值),那麼(me)數據就(jiù)有 49152 維。如果你可以給這(zhè)個圖像空間降維,同時(shí)又不毀掉圖像中太多有意義的内容,那麼(me)你就(jiù)很好(hǎo)地執行了降維。

我們將(jiāng)了解兩(liǎng)種(zhǒng)實際中很常用的降維技術:主成(chéng)分分析和奇異值分解。

主成(chéng)分分析(PCA)

首先,了解一點線性代數知識——看看空間(space)和基(base)。

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

人人都(dōu)能(néng)讀懂的無監督學(xué)習:什麼(me)是聚類和降維?

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

這(zhè)意味著(zhe)我們可以修改空間的基礎。現在想象有更高維度的空間,比如有 5 萬維。你可以爲這(zhè)個空間選擇一個基礎,然後(hòu)根據這(zhè)個基礎僅選擇 200 個最重要的向(xiàng)量。這(zhè)些基向(xiàng)量被稱爲主成(chéng)分,而且你可以選擇其中一個子集構成(chéng)一個新空間,它的維度比原來的空間少,但又保留了盡可能(néng)多的數據複雜度。

要選擇出最重要的主成(chéng)分,我們需要檢查這(zhè)些數據的方差,并按這(zhè)個指标給它們排序。

理解 PCA 的另一個思路是 PCA 將(jiāng)我們數據中存在的空間重映射成(chéng)了一個更加緊湊的空間。這(zhè)種(zhǒng)變換後(hòu)的維度比原來的維度更小。

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

奇異值分解(SVD)

假設我們將(jiāng)我們的數據表示成(chéng)一個 A=m×n 的大型矩陣。SVD 讓我們可以將(jiāng)這(zhè)個大型矩陣分解成(chéng) 3 個較小的矩陣的乘積;這(zhè) 3 個矩陣分别是 U=m x r、對(duì)角矩陣 Σ=r x r、V=r x n,其中 r 是一個很小的值。

人人都(dōu)能(néng)讀懂的無監督學(xué)習:什麼(me)是聚類和降維?

在這(zhè)個 r×r 的對(duì)角矩陣 Σ 中的值被稱爲奇異值。這(zhè)些值的奇妙之處是可以被用于壓縮原來的矩陣,如果你丢棄奇異值中最小的 20% 以及矩陣 U 和 V 中相關的列,你就(jiù)可以節省大量空間,同時(shí)仍然能(néng)很好(hǎo)地表征原來的矩陣。

爲了更準确地了解其中的含義,我們來看看一張小狗的圖片:

人人都(dōu)能(néng)讀懂的無監督學(xué)習:什麼(me)是聚類和降維?

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

人人都(dōu)能(néng)讀懂的無監督學(xué)習:什麼(me)是聚類和降維?

根據這(zhè)個事(shì)實,我們可以丢棄後(hòu)面(miàn)的 250 個值(即將(jiāng)它們設爲 0),僅保留這(zhè)張小狗圖像的「rank(秩)50」版本。這(zhè)裡(lǐ),我們創建了秩爲 200、100、50、30、20、10 和 3 的小狗照片。顯然,照片變小了。但假設我們認爲秩爲 30 的小狗仍然很好(hǎo),現在讓我們看看我們實現了多少壓縮。

原先的圖像矩陣有 305*275 = 83,875 個值,秩爲 30 的圖像則有 305*30+30+30*275=17,430 個值。值的數量差不多少了 5 倍,但質量卻下降很少。上述計算的原因是當我們執行 UΣ'V 運算時(shí),U 和 V 矩陣中的一部分因爲乘 0 也被丢棄(其中 Σ' 是 Σ 的修改後(hòu)版本,其中僅包含了前面(miàn)的 30 個值)。

人人都(dōu)能(néng)讀懂的無監督學(xué)習:什麼(me)是聚類和降維?

無監督學(xué)習常常被用于數據預處理。一般而言,這(zhè)意味著(zhe)以某種(zhǒng)平均-保留的方式壓縮數據,比如 PCA 或 SVD;之後(hòu),這(zhè)些數據可被用于深度神經(jīng)網絡或其它監督式學(xué)習算法。

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