人人都能讀懂的無監督學習:什麼是聚類和降維?

2021-01-11 機器之心Pro

本文由機器之心編輯,「機器之心」專注生產人工智慧專業性內容,適合開發者和從業者閱讀參考。點擊右上角即刻關注。

機器學習已經成為了改變時代的大事,一時間似乎人人都應該懂一點機器學習。但機器學習涉及到的數學知識和編程能力往往讓沒有相關經驗的人望而卻步。YupTechnologies 機器學習專家 Vishal Maini 近日在 Medium 上發布了一個介紹機器學習的系列文章《人人讀得懂的機器學習(Machine Learning for Humans)》,用普通人能理解的語言對機器學習領域的一些核心概念進行了闡述。機器之心在這裡編譯了這一系列文章的第三部分「無監督學習」,對主要的聚類和降維算法進行了介紹,其中包括 K 均值聚類、層次聚類、主成分分析(PCA)和奇異值分解(SVD)。機器之心將逐步向讀者介紹該系列更多的文章。

我們可以怎樣發現一個數據集的底層結構?我們可以怎樣最有用地對其進行歸納和分組?我們可以怎樣以一種壓縮格式有效地表徵數據?這都是無監督學習的目標,之所以稱之為「無監督」,是因為這是從無標籤的數據開始學習的。

我們將在這裡探索的兩種無監督學習任務是:1)將數據按相似度聚類(clustering)成不同的分組;2)降維(reducing dimensionality),以便在保留數據結構和有用性的同時對數據進行壓縮。

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

一家廣告平臺需要根據相似的人口學特徵和購買習慣將美國人口分成不同的小組,以便廣告客戶可以通過有關聯的廣告接觸到他們的目標客戶。Airbnb 需要將自己的房屋清單分組成不同的社區,以便用戶能更輕鬆地查閱這些清單。一個數據科學團隊需要降低一個大型數據集的維度的數量,以便簡化建模和降低文件大小。

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

聚類

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

Personix 人口學特徵聚類的一部分

他們的白皮書表明他們使用了重心聚類(centroid clustering)和主成分分析,這兩種技術在這一節都有覆蓋。

你可以想像,如果廣告主想(1)理解他們已有的客戶群,(2)通過相關的人口學特徵、興趣和生活習慣向潛在新客戶投放定向廣告以便高效利用廣告開支,那麼這些聚類將對他們非常有用。

實際上,你只需要在 Acxiom 的「我屬於哪個聚類?」工具中回答幾個簡單問題,你就能知道你個人屬於哪個聚類,體驗地址:https://isapps.acxiom.com/personicx/personicx.aspx

讓我們了解幾種聚類方法,看看這樣的任務是如何完成的。

K 均值聚類

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

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

使用 K 均值聚類,我們希望將我們的數據點聚類為 K 組。K 更大時,創造的分組就更小,就有更多粒度;K 更小時,則分組就更大,粒度更少。

該算法的輸出是一組「標籤」,這些標籤將每個數據點都分配到了 K 組中的一組。在 K 均值聚類中,這些組的定義方式是為每個組創造一個重心(centroid)。這些重心就像是聚類的心臟,它們可以「捕獲」離自己最近的點並將其加入到自己的聚類中。

你可以把這些重心看作是派對上成為關注焦點的人,他們就像是有磁性一樣。如果只有一個這樣的人,每個人都會圍繞在他周圍;如果有很多這樣的人,就會形成很多更小一點的活動中心。

K 均值聚類的步驟如下:

定義 K 個重心。一開始這些重心是隨機的(也有一些更加有效的用於初始化重心的算法)

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

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

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

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

K 均值聚類的另一個真實應用是分類手寫數字。假設我們有用像素亮度的長向量表示的數字的圖像。假設這些圖像是黑白兩色的,大小為 64×64 像素。每個像素代表一個維度。那麼這些圖像就生活在一個有 64×64=4096 個維度的世界裡。在這個 4096 維的世界裡,K 均值聚類讓我們可以按接近程度對這些圖像分組,並且假設這些靠得很近的圖像都是同一個數字。這種算法可以在數字識別上得到相當好的結果,參閱:http://ieeexplore.ieee.org/document/6755106/?reload=true

層次聚類

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

層次聚類類似於常規的聚類,只是你的目標是構建一個聚類的層次。如果你最終的聚類數量不確定,那這種方法會非常有用。比如說,假設要給 Etsy 或亞馬遜等網絡市場上的項目分組。在主頁上,你只需要少量大組方便導航,但隨著你的分類越來越特定,你需要的粒度水平也越來越大,即區別更加明顯的項聚類。

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

層次聚類的步驟如下:

首先從 N 個聚類開始,每個數據點一個聚類。

將彼此靠得最近的兩個聚類融合為一個。現在你有 N-1 個聚類。

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

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

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

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

降維

「對於那些該砍去的非精髓部分的態度,並不是每天增加吸收,而是每日儘量排減。」——李小龍

降維看上去很像壓縮。這是為了在儘可能保存相關的結構的同時降低數據的複雜度。如果你有一張簡單的 128×128×3 像素的圖像(長×寬×RGB 值),那麼數據就有 49152 維。如果你可以給這個圖像空間降維,同時又不毀掉圖像中太多有意義的內容,那麼你就很好地執行了降維。

我們將了解兩種實際中很常用的降維技術:主成分分析和奇異值分解。

主成分分析(PCA)

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

你應該知道由原點 O(0,0) 和基向量 i(1,0) 與 j(0,1) 定義的坐標平面。事實上,你也可以選擇一個完全不同的基礎,其中的數學仍然有效。比如說,你可以保持原點仍然為 O,但選擇 i'=(2,1) 和 j'=(1,2) 作為基向量。如果你有耐心計算一下,你會發現在 i', j' 坐標系統中標記為 (2,2) 的點在 i, j 系統標記為 (6, 6)。

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

這意味著我們可以修改空間的基礎。現在想像有更高維度的空間,比如有 5 萬維。你可以為這個空間選擇一個基礎,然後根據這個基礎僅選擇 200 個最重要的向量。這些基向量被稱為主成分,而且你可以選擇其中一個子集構成一個新空間,它的維度比原來的空間少,但又保留了儘可能多的數據複雜度。

要選擇出最重要的主成分,我們需要檢查這些數據的方差,並按這個指標給它們排序。

理解 PCA 的另一個思路是 PCA 將我們數據中存在的空間重映射成了一個更加緊湊的空間。這種變換後的維度比原來的維度更小。

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

奇異值分解(SVD)

假設我們將我們的數據表示成一個 A=m×n 的大型矩陣。SVD 讓我們可以將這個大型矩陣分解成 3 個較小的矩陣的乘積;這 3 個矩陣分別是 U=m x r、對角矩陣 Σ=r x r、V=r x n,其中 r 是一個很小的值。

在這個 r×r 的對角矩陣 Σ 中的值被稱為奇異值。這些值的奇妙之處是可以被用於壓縮原來的矩陣,如果你丟棄奇異值中最小的 20% 以及矩陣 U 和 V 中相關的列,你就可以節省大量空間,同時仍然能很好地表徵原來的矩陣。

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

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

根據這個事實,我們可以丟棄後面的 250 個值(即將它們設為 0),僅保留這張小狗圖像的「rank(秩)50」版本。這裡,我們創建了秩為 200、100、50、30、20、10 和 3 的小狗照片。顯然,照片變小了。但假設我們認為秩為 30 的小狗仍然很好,現在讓我們看看我們實現了多少壓縮。原先的圖像矩陣有 305*275 = 83,875 個值,秩為 30 的圖像則有 305*30+30+30*275=17,430 個值。值的數量差不多少了 5 倍,但質量卻下降很少。上述計算的原因是當我們執行 UΣ'V 運算時,U 和 V 矩陣中的一部分因為乘 0 也被丟棄(其中 Σ' 是 Σ 的修改後版本,其中僅包含了前面的 30 個值)。

無監督學習常常被用於數據預處理。一般而言,這意味著以某種平均-保留的方式壓縮數據,比如 PCA 或 SVD;之後,這些數據可被用於深度神經網絡或其它監督式學習算法。

相關焦點

  • 港中文MMLab自步對比學習:充分挖掘無監督學習樣本
    該工作提出自步對比學習框架及混合記憶模型,旨在解決無監督及領域自適應表徵學習中數據無法被充分挖掘的問題。這項工作在無監督的目標重識別任務上顯著地超越最先進技術高達16.7%;領域自適應的目標重識別任務中,在無監督的目標域上超越最先進技術高達5.0%,同時可以提升有監督的源域性能高達6.6%。
  • 入門| 從線性回歸到無監督學習,數據科學家需要掌握的十大統計技術
    本文介紹了數據科學家需要掌握的十大統計技術,包括線性回歸、分類、重採樣、降維、無監督學習等。不管你對數據科學持什麼態度,都不可能忽略分析、組織和梳理數據的重要性。Glassdoor 網站根據大量僱主和員工的反饋數據製作了「美國最好的 25 個職位」榜單,其中第一名就是數據科學家。
  • 李航《統計學習方法》第二版上線,6 年耕耘增加無監督學習
    李航博士告訴機器之心,《統計學習方法》第二版新加了無監督學習方面的內容,並對第一版的監督學習方法做了一些修改。總體而言,第二版可以分為監督學習和無監督學習兩篇。從這兩大塊出發,基本上傳統機器學習的主要概念就能一步步掌握了。
  • 自監督、半監督和有監督全涵蓋,四篇論文遍歷對比學習的研究進展
    一、利用對比學習實現降維本文是 CVPR 2006 中的一篇文章,由 Yann LeCun 組首次提出了對比學習損失函數的概念 [1]。降維是指將一組高維數據映射到低維流形上,以便將輸入空間中的「相似」點映射到流形的附近點上。比如著名的 PCA 和 MDS 就是降維方法。
  • 自監督學習知識遷移
    這就會帶來了一些有趣的挑戰:對於前置任務,我們的目標是在大規模的無標籤數據集上學習,因此更深的模型(如ResNet)將會幫助我們學習更好的表示。在常規的有監督分類中,圖像在語義上相似的信息是通過人類注釋的標籤進行編碼的。在這種標籤上訓練的模型一般都會有一個表示空間,對語義相似的圖像進行分組。因此,對於自監督學習中的前置任務,目標是隱式學習一個使相同類別圖像相似而不同類別圖像不相似的度量。因此,如果我們能夠以某種方式將語義相關的圖像編碼到相同的標籤上,我們就可以對學習的表示提供可靠的估計。
  • 想入門機器學習?機器之心為你準備了一份中文資源合集
    教程 | 從頭開始:用Python實現決策樹算法從決策樹到隨機森林:樹型算法的原理與實現集成學習一覽在理解了決策樹的動態特性以後,研究集成訓練樹的集(集成)來提高整體準確率的方法很有用。隨機森林、梯度樹提升和 AdaBoost 都是強大的算法,且複雜度較低。對比簡單的樹和提升方法與 bagging 方法採用的樹的學習過程挺有趣的。
  • CFA二級思維導圖分享:機器學習(Machine Learning)
    根據數據類型的不同,機器學習通用的分類為:監督學習(Supervised Learning)、非監督學習(Unsuperviese Learning)、深度學習和強化學習(Deep Learning & Reinforcement Learning)。
  • 有了K均值聚類,為什麼還需要DBSCAN聚類算法?
    :unsplash聚類分析是一種無監督學習法,它將數據點分離成若干個特定的群或組,使得在某種意義上同一組中的數據點具有相似的性質,不同組中的數據點具有不同的性質。每一個觀測最終都成為某個聚類的一部分,即使這些觀測在向量空間中分散得很遠。由於聚類依賴於聚類元素的均值,因此每個數據點在形成聚類中都起著作用。數據點的輕微變化可能會影響聚類結果。由於聚類的形成方式,這個問題在DBSCAN中大大減少。這通常不是什麼大問題,除非遇到一些具有古怪形狀的數據。
  • K-Means聚類講解:算法和Sklearn的實現(附代碼)
    K-Means聚類是機器學習領域中最強大的聚類算法之一。他的原因比較簡單,但得出的結果也非常準確。聚類是理解數據集的非常重要的方式,因此在本文中,我們將討論什麼是聚類,為什麼需要聚類以及什麼是k-means聚類。什麼是聚類聚類是根據數據的屬性將數據分為兩個或更多組的任務,更確切地說,是基於數據中或多或少明顯的某些模式。
  • 回歸、分類與聚類:三大方向剖解機器學習算法的優缺點(附Python和R...
    雖然類似的總結有很多,但是它們都沒有真正解釋清楚每個算法在實踐中的好壞,而這正是本篇梳理希望完成的。因此本文力圖基於實踐中的經驗,討論每個算法的優缺點。而機器之心也在文末給出了這些算法的具體實現細節。對機器學習算法進行分類不是一件容易的事情,總的來看,有如下幾種方式:生成與判別、參數與非參數、監督與非監督等等。
  • ItClust:單細胞RNA測序分析的聚類和細胞類型分類算法
    RNA測序分析的聚類和細胞類型分類的機器學習算法。這一步驟保證了目標分類網絡繼承了所有源分類網絡已學習到的信息;(4)最後,完成初始化的目標分類網絡再通過無監督的方式從目標數據中學習,微調參數,以便捕獲目標數據中特有的細胞類型的基因表達。
  • 預測建模、監督機器學習和模式分類概覽
    模式分類(pattern classification)和機器學習(machine learning)是非常熱的話題,幾乎在所有的現代應用程式中都得到了應用:例如郵局中的光學字符識別(OCR),電子郵件過濾,超市條形碼掃描,等等。在這篇文章中,我會簡要描述一個典型的監督學習任務的主要概念,這些概念將作為將來的文章和實現各種學習算法的基礎。
  • 使用Python進行K均值聚類
    在機器學習中,當我們要處理一個未標記的數據集時,稱為「無監督學習」。有時我們只是想知道我們的數據是如何組織起來的這樣我們就能知道數據是如何組織起來的。聚類意味著對一組對象進行分組。K-means聚類是無監督學習的一部分,我們使用的是未標記的數據集,這個算法會自動為我們將數據分組成聚類。它是目前最流行、應用最廣泛的聚類算法之一。它用於各種應用程式,例如市場細分,圖像細分等。
  • 譜聚類(spectral clustering)原理總結
    距離較遠的兩個點之間的邊權重值較低,而距離較近的兩個點之間的邊權重值較高,通過對所有數據點組成的圖進行切圖,讓切圖後不同的子圖間邊權重和儘可能的低,而子圖內的邊權重和儘可能的高,從而達到聚類的目的。乍一看,這個算法原理的確簡單,但是要完全理解這個算法的話,需要對圖論中的無向圖,線性代數和矩陣分析都有一定的了解。下面我們就從這些需要的基礎知識開始,一步步學習譜聚類。
  • 機器學習之基於sklearn的KMeans聚類
    聚類算法,無監督學習的代表算法,又叫做「無監督分類」即在訓練的時候只需要特徵矩陣,不需要真實值標籤可以有效地幫助我們探索數據的自然分布一、KMeans算法的運行過程運行的流程如下:自動聚類時的質心點的每步驟變化如下:
  • 73歲Hinton老爺子構思下一代神經網絡:屬於無監督對比學習
    Hinton 的報告主要內容如下:人工神經網絡最重要的待解難題是:如何像大腦一樣高效執行無監督學習。目前,無監督學習主要有兩類方法。第一類的典型代表是 BERT 和變分自編碼器(VAE),它們使用深度神經網絡重建輸入。但這類方法無法很好地處理圖像問題,因為網絡最深層需要編碼圖像的細節。
  • 流行的機器學習算法總結,幫助你開啟機器學習算法學習之旅
    儘管AI的思路是構建可以自行思考和執行的更智能的系統,但仍然需要對其進行訓練。AI的ML領域是為實現非常精確的目標而創建的,它引入了多種算法,從而可以更順暢地進行數據處理和決策。什麼是機器學習算法?機器學習算法是任何模型背後的大腦,可讓機器學習並使其更智能。
  • 簡潔詳盡講解文本聚類
    話雖如此,讓我們從共識開始,什麼是聚簇,什麼不是聚簇。實際上,聚簇不過是包含相似對象的組。聚類是用於將對象分為這些組的過程。聚簇內部的對象應儘可能相似。不同聚簇中的對象應儘可能不同。但是誰定義「相似」的含義呢?我們將稍後再講。現在,你可能已經聽說過分類。在對對象進行分類時,還可以將它們分為不同的組,但是它和聚簇相比有一些重要的區別。
  • 你需要的最全面的K-means聚類指南
    在形式上,我們可以說:聚類是基於數據中的模式將整個數據劃分為組(也稱為簇)的過程。你能猜出聚類是哪種類型的學習問題嗎?這是一個有監督還是無監督的學習問題嗎?考慮一下,並利用我們剛才看到的例子。是的,聚類是一種無監督的學習問題!2.1. 聚類為什麼是一個無監督學習問題?
  • CNN 在基於弱監督學習的圖像分割中的應用
    最近基於深度學習的圖像分割技術一般依賴於卷積神經網絡 CNN 的訓練,訓練過程中需要非常大量的標記圖像,即一般要求訓練圖像中都要有精確的分割結果。對訓練圖像中的每個像素做標記非常耗時,特別是對醫學圖像而言,完成對一個三維的 CT 或者 MRI 圖像中各組織的標記過程需要數小時。如果學習算法能通過對一些初略標記過的數據集的學習就能完成好的分割結果,那麼對訓練數據的標記過程就很簡單,這可以大大降低花在訓練數據標記上的時間。這些初略標記可以是:1. 只給出一張圖像裡面包含哪些物體;2.