機(jī)器學(xué)習(xí)已經(jīng)成為了改變時(shí)代的大事,一時(shí)間似乎人人都應(yīng)該懂一點(diǎn)機(jī)器學(xué)習(xí)。但機(jī)器學(xué)習(xí)涉及到的數(shù)學(xué)知識(shí)和編程能力往往讓沒有相關(guān)經(jīng)驗(yàn)的人望而卻步。
YupTechnologies 機(jī)器學(xué)習(xí)專家 Vishal Maini 近日在 Medium 上發(fā)布了一個(gè)介紹機(jī)器學(xué)習(xí)的系列文章《人人讀得懂的機(jī)器學(xué)習(xí)(Machine Learning for Humans)》,用普通人能理解的語言對(duì)機(jī)器學(xué)習(xí)領(lǐng)域的一些核心概念進(jìn)行了闡述。機(jī)器之心在這里編譯了這一系列文章的第三部分「無監(jiān)督學(xué)習(xí)」,對(duì)主要的聚類和降維算法進(jìn)行了介紹,其中包括 K 均值聚類、層次聚類、主成分分析(PCA)和奇異值分解(SVD)。
我們可以怎樣發(fā)現(xiàn)一個(gè)數(shù)據(jù)集的底層結(jié)構(gòu)?我們可以怎樣最有用地對(duì)其進(jìn)行歸納和分組?我們可以怎樣以一種壓縮格式有效地表征數(shù)據(jù)?這都是無監(jiān)督學(xué)習(xí)的目標(biāo),之所以稱之為「無監(jiān)督」,是因?yàn)檫@是從無標(biāo)簽的數(shù)據(jù)開始學(xué)習(xí)的。
我們將在這里探索的兩種無監(jiān)督學(xué)習(xí)任務(wù)是:1)將數(shù)據(jù)按相似度聚類(clustering)成不同的分組;2)降維(reducing dimensionality),以便在保留數(shù)據(jù)結(jié)構(gòu)和有用性的同時(shí)對(duì)數(shù)據(jù)進(jìn)行壓縮。
無監(jiān)督學(xué)習(xí)方法可能有用的案例:
一家廣告平臺(tái)需要根據(jù)相似的人口學(xué)特征和購買習(xí)慣將美國人口分成不同的小組,以便廣告客戶可以通過有關(guān)聯(lián)的廣告接觸到他們的目標(biāo)客戶。
Airbnb 需要將自己的房屋清單分組成不同的社區(qū),以便用戶能更輕松地查閱這些清單。
一個(gè)數(shù)據(jù)科學(xué)團(tuán)隊(duì)需要降低一個(gè)大型數(shù)據(jù)集的維度的數(shù)量,以便簡化建模和降低文件大小。
和監(jiān)督學(xué)習(xí)不同,要找到評(píng)價(jià)無監(jiān)督學(xué)習(xí)算法優(yōu)劣的指標(biāo)可并不輕松?!副憩F(xiàn)水平」往往是主觀的,而且因領(lǐng)域不同而各不相同。
聚類的一個(gè)有趣的真實(shí)應(yīng)用案例是營銷數(shù)據(jù)提供商 Acxiom 的人生階段聚類系統(tǒng) Personicx。這項(xiàng)服務(wù)將美國家庭分成了 70 個(gè)不同的聚類,它們分屬于 21 個(gè)人生階段分組,可以被廣告主用于投放定向 Facebook 廣告、陳列式廣告和直郵廣告等。
Personix 人口學(xué)特征聚類的一部分
他們的白皮書表明他們使用了重心聚類(centroid clustering)和主成分分析,這兩種技術(shù)在這一節(jié)都有覆蓋。
你可以想象,如果廣告主想(1)理解他們已有的客戶群,(2)通過相關(guān)的人口學(xué)特征、興趣和生活習(xí)慣向潛在新客戶投放定向廣告以便高效利用廣告開支,那么這些聚類將對(duì)他們非常有用。
實(shí)際上,你只需要在 Acxiom 的「我屬于哪個(gè)聚類?」工具中回答幾個(gè)簡單問題,你就能知道你個(gè)人屬于哪個(gè)聚類,體驗(yàn)地址:https://isapps.acxiom.com/personicx/personicx.aspx
讓我們了解幾種聚類方法,看看這樣的任務(wù)是如何完成的。
「重心之賽有 k 個(gè)魔戒,在那之上,是希望的力量?!?/p>
聚類的目標(biāo)是為數(shù)據(jù)點(diǎn)分組,使得不同聚類中的數(shù)據(jù)點(diǎn)是不相似的,同一聚類中的數(shù)據(jù)點(diǎn)則是類似的。
使用 K 均值聚類,我們希望將我們的數(shù)據(jù)點(diǎn)聚類為 K 組。K 更大時(shí),創(chuàng)造的分組就更小,就有更多粒度;K 更小時(shí),則分組就更大,粒度更少。
該算法的輸出是一組「標(biāo)簽」,這些標(biāo)簽將每個(gè)數(shù)據(jù)點(diǎn)都分配到了 K 組中的一組。在 K 均值聚類中,這些組的定義方式是為每個(gè)組創(chuàng)造一個(gè)重心(centroid)。這些重心就像是聚類的心臟,它們可以「捕獲」離自己最近的點(diǎn)并將其加入到自己的聚類中。
你可以把這些重心看作是派對(duì)上成為關(guān)注焦點(diǎn)的人,他們就像是有磁性一樣。如果只有一個(gè)這樣的人,每個(gè)人都會(huì)圍繞在他周圍;如果有很多這樣的人,就會(huì)形成很多更小一點(diǎn)的活動(dòng)中心。
K 均值聚類的步驟如下:
定義 K 個(gè)重心。一開始這些重心是隨機(jī)的(也有一些更加有效的用于初始化重心的算法)
尋找最近的重心并且更新聚類分配。將每個(gè)數(shù)據(jù)點(diǎn)都分配給這 K 個(gè)聚類中的一個(gè)。每個(gè)數(shù)據(jù)點(diǎn)都被分配給離它們最近的重心的聚類。這里的「接近程度」的度量是一個(gè)超參數(shù)——通常是歐幾里得距離(Euclidean distance)。
將重心移動(dòng)到它們的聚類的中心。每個(gè)聚類的重心的新位置是通過計(jì)算該聚類中所有數(shù)據(jù)點(diǎn)的平均位置得到的。
重復(fù)第 2 和 3 步,直到每次迭代時(shí)重心的位置不再顯著變化(即直到該算法收斂)。
這就是 K 均值聚類工作方式的精簡版!該算法的可視化演示可在這里查看:https://www.naftaliharris.com/blog/visualizing-k-means-clustering/,你可以像讀漫畫一樣理解。平面上的每個(gè)數(shù)據(jù)點(diǎn)都根據(jù)離自己最近的重心加了顏色。你可以看到這些重心(更大一點(diǎn)的藍(lán)點(diǎn)、紅點(diǎn)和綠點(diǎn))一開始是隨機(jī)的,然后很快進(jìn)行了調(diào)整,得到了它們各自的聚類。
K 均值聚類的另一個(gè)真實(shí)應(yīng)用是分類手寫數(shù)字。假設(shè)我們有用像素亮度的長向量表示的數(shù)字的圖像。假設(shè)這些圖像是黑白兩色的,大小為 64×64 像素。每個(gè)像素代表一個(gè)維度。那么這些圖像就生活在一個(gè)有 64×64=4096 個(gè)維度的世界里。
在這個(gè) 4096 維的世界里,K 均值聚類讓我們可以按接近程度對(duì)這些圖像分組,并且假設(shè)這些靠得很近的圖像都是同一個(gè)數(shù)字。這種算法可以在數(shù)字識(shí)別上得到相當(dāng)好的結(jié)果,參閱:http://ieeexplore.ieee.org/document/6755106/?reload=true
「讓我們把 100 萬個(gè)選項(xiàng)變成 7 個(gè)選項(xiàng)?;蛘?5 個(gè)?;蛘?20 個(gè)?呃,我們可以過會(huì)兒決定?!?/p>
層次聚類類似于常規(guī)的聚類,只是你的目標(biāo)是構(gòu)建一個(gè)聚類的層次。如果你最終的聚類數(shù)量不確定,那這種方法會(huì)非常有用。比如說,假設(shè)要給 Etsy 或亞馬遜等網(wǎng)絡(luò)市場上的項(xiàng)目分組。在主頁上,你只需要少量大組方便導(dǎo)航,但隨著你的分類越來越特定,你需要的粒度水平也越來越大,即區(qū)別更加明顯的項(xiàng)聚類。
在算法的輸出方面,除了聚類分配,你也需要構(gòu)建一個(gè)很好的樹結(jié)構(gòu),以幫助你了解這些聚類之間的層次結(jié)構(gòu)。然后你可以從這個(gè)樹中選擇你希望得到的聚類數(shù)量。
層次聚類的步驟如下:
首先從 N 個(gè)聚類開始,每個(gè)數(shù)據(jù)點(diǎn)一個(gè)聚類。
將彼此靠得最近的兩個(gè)聚類融合為一個(gè)。現(xiàn)在你有 N-1 個(gè)聚類。
重新計(jì)算這些聚類之間的距離。有很多可以辦到這件事的方法(參見這個(gè)教程了解更多細(xì)節(jié):https://home.deib.polimi.it/matteucc/Clustering/tutorial_html/hierarchical.html)。其中一種方法(平均連接聚類,average-linkage clustering)是將兩個(gè)聚類之間的距離看作是它們各自元素之間所有距離的平均。
重復(fù)第 2 和 3 步,直到你得到包含 N 個(gè)數(shù)據(jù)點(diǎn)的一個(gè)聚類。你就會(huì)得到如下圖所示的樹(也被稱為樹狀圖))。
選擇一個(gè)聚類數(shù)量,然后在這個(gè)樹狀圖中劃一條水平線。比如說,如果你想要 K=2 個(gè)聚類,你應(yīng)該在距離大約為 20000 的位置畫一條水平線,你會(huì)得到一個(gè)包含數(shù)據(jù)點(diǎn) 8、9、11、16 的聚類和包含其它數(shù)據(jù)點(diǎn)的另一個(gè)聚類。一般而言,你得到的聚類的數(shù)量就是水平線與樹狀圖中的豎直線的交叉點(diǎn)的數(shù)量。
更多有關(guān)層次聚類的詳細(xì)信息,可參閱這個(gè)視頻:https://www.youtube.com/watch?v=OcoE7JlbXvY
「對(duì)于那些該砍去的非精髓部分的態(tài)度,并不是每天增加吸收,而是每日盡量排減。」——李小龍
降維看上去很像壓縮。這是為了在盡可能保存相關(guān)的結(jié)構(gòu)的同時(shí)降低數(shù)據(jù)的復(fù)雜度。如果你有一張簡單的 128×128×3 像素的圖像(長×寬×RGB 值),那么數(shù)據(jù)就有 49152 維。如果你可以給這個(gè)圖像空間降維,同時(shí)又不毀掉圖像中太多有意義的內(nèi)容,那么你就很好地執(zhí)行了降維。
我們將了解兩種實(shí)際中很常用的降維技術(shù):主成分分析和奇異值分解。
主成分分析(PCA)
首先,了解一點(diǎn)線性代數(shù)知識(shí)——看看空間(space)和基(base)。
你應(yīng)該知道由原點(diǎn) O(0,0) 和基向量 i(1,0) 與 j(0,1) 定義的坐標(biāo)平面。事實(shí)上,你也可以選擇一個(gè)完全不同的基礎(chǔ),其中的數(shù)學(xué)仍然有效。比如說,你可以保持原點(diǎn)仍然為 O,但選擇 i'=(2,1) 和 j'=(1,2) 作為基向量。如果你有耐心計(jì)算一下,你會(huì)發(fā)現(xiàn)在 i', j' 坐標(biāo)系統(tǒng)中標(biāo)記為 (2,2) 的點(diǎn)在 i, j 系統(tǒng)標(biāo)記為 (6, 6)。
使用 Mathisfun 的「交互式笛卡爾坐標(biāo)」繪制:https://www.mathsisfun.com/data/cartesian-coordinates-interactive.html
這意味著我們可以修改空間的基礎(chǔ)。現(xiàn)在想象有更高維度的空間,比如有 5 萬維。你可以為這個(gè)空間選擇一個(gè)基礎(chǔ),然后根據(jù)這個(gè)基礎(chǔ)僅選擇 200 個(gè)最重要的向量。這些基向量被稱為主成分,而且你可以選擇其中一個(gè)子集構(gòu)成一個(gè)新空間,它的維度比原來的空間少,但又保留了盡可能多的數(shù)據(jù)復(fù)雜度。
要選擇出最重要的主成分,我們需要檢查這些數(shù)據(jù)的方差,并按這個(gè)指標(biāo)給它們排序。
理解 PCA 的另一個(gè)思路是 PCA 將我們數(shù)據(jù)中存在的空間重映射成了一個(gè)更加緊湊的空間。這種變換后的維度比原來的維度更小。
僅需使用重映射空間的前幾個(gè)維度,我們就可以開始理解這個(gè)數(shù)據(jù)集的組織結(jié)構(gòu)。這就是降維的目的:減少復(fù)雜度(即這里的維度),同時(shí)保留結(jié)構(gòu)(方差)。這里有篇 Samer 寫的論文,介紹了使用 PCA(以及擴(kuò)散映射等技術(shù))試圖理解維基解密披露的電報(bào):http://mou3amalet.com/cargocollective/675_xuesabri-final.pdf
奇異值分解(SVD)
假設(shè)我們將我們的數(shù)據(jù)表示成一個(gè) A=m×n 的大型矩陣。SVD 讓我們可以將這個(gè)大型矩陣分解成 3 個(gè)較小的矩陣的乘積;這 3 個(gè)矩陣分別是 U=m x r、對(duì)角矩陣 Σ=r x r、V=r x n,其中 r 是一個(gè)很小的值。
在這個(gè) r×r 的對(duì)角矩陣 Σ 中的值被稱為奇異值。這些值的奇妙之處是可以被用于壓縮原來的矩陣,如果你丟棄奇異值中最小的 20% 以及矩陣 U 和 V 中相關(guān)的列,你就可以節(jié)省大量空間,同時(shí)仍然能很好地表征原來的矩陣。
為了更準(zhǔn)確地了解其中的含義,我們來看看一張小狗的圖片:
我們將使用 Andrew Gibiansky 寫的關(guān)于 SVD 的文章中代碼:http://andrew.gibiansky.com/blog/mathematics/cool-linear-algebra-singular-value-decomposition/。首先,我們發(fā)現(xiàn)如果我們根據(jù)大小排序這些奇異值(矩陣 Σ 的值),那么前 50 個(gè)奇異值將包含整個(gè)矩陣 Σ 的大小的 85%。
根據(jù)這個(gè)事實(shí),我們可以丟棄后面的 250 個(gè)值(即將它們?cè)O(shè)為 0),僅保留這張小狗圖像的「rank(秩)50」版本。這里,我們創(chuàng)建了秩為 200、100、50、30、20、10 和 3 的小狗照片。顯然,照片變小了。但假設(shè)我們認(rèn)為秩為 30 的小狗仍然很好,現(xiàn)在讓我們看看我們實(shí)現(xiàn)了多少壓縮。
原先的圖像矩陣有 305*275 = 83,875 個(gè)值,秩為 30 的圖像則有 305*30+30+30*275=17,430 個(gè)值。值的數(shù)量差不多少了 5 倍,但質(zhì)量卻下降很少。上述計(jì)算的原因是當(dāng)我們執(zhí)行 UΣ'V 運(yùn)算時(shí),U 和 V 矩陣中的一部分因?yàn)槌?0 也被丟棄(其中 Σ' 是 Σ 的修改后版本,其中僅包含了前面的 30 個(gè)值)。
無監(jiān)督學(xué)習(xí)常常被用于數(shù)據(jù)預(yù)處理。一般而言,這意味著以某種平均-保留的方式壓縮數(shù)據(jù),比如 PCA 或 SVD;之后,這些數(shù)據(jù)可被用于深度神經(jīng)網(wǎng)絡(luò)或其它監(jiān)督式學(xué)習(xí)算法。
轉(zhuǎn)載36氪:http://36kr.com/p/5090797.html