推薦 :使用高斯混合模型,讓聚類更好更精確(附數據&代碼&學習資源)

2022-02-07 數據分析

作者:AISHWARYA SINGH 翻譯:張玲 校對:張一豪

本文約3500字,建議閱讀10+分鐘。

本文簡單介紹聚類的基礎知識,包括快速回顧K-means算法,然後深入研究高斯混合模型的概念,並用Python實現。概述簡介我真的很喜歡研究無監督的學習問題,因為它們提供了一個完全不同於監督學習問題的挑戰:提供更大的空間來試驗我的數據。這也不難理解機器學習領域的大多數發展和突破都發生在無監督學習這一塊。無監督學習中最流行的技術之一是聚類,這通常我們在早期學習機器學習時學習的概念,而且很容易掌握。我相信你已經遇到過,甚至參與過用戶分層、市場購物籃分析等項目。

但問題是,聚類有很多種,不只局限於我們之前學過的基本算法。它是一種我們可以在現實世界中準確無誤地使用的強大的無監督學習技術。「高斯混合模型是我在本文中即將要討論的一種聚類算法。」想要預測你最喜歡的產品銷售量嗎?或者你想要通過不同客戶群體的視角來剖析客戶流失。不管是什麼應用場景,你都會發現高斯混合模型是非常有用的。本文將採用自下而上的方法。首先,我們學習聚類的基礎知識,包括快速回顧K-means算法,然後,我們將深入研究高斯混合模型的概念,並用Python實現它們。如果你對聚類和數據科學還不熟悉,我建議你先學習以下綜合課程:

應用機器學習相關課程連結:

https://courses.analyticsvidhya.com/courses/applied-machine-learning-beginner-to-professional?utm_source=blog&utm_medium=gaussian-mixture-models-clustering


目錄

一、聚類簡介

二、K-means聚類簡介

三、K-means聚類缺點

四、高斯混合模型簡介

五、高斯分布

六、什麼是期望最大化

七、高斯混合模型中的期望最大化

八、用Python實現高斯混合聚類模型

一、聚類簡介在我們開始討論高斯混合模型的本質之前,讓我們快速回顧一些基本概念。請注意:如果您已經熟悉了聚類背後的思想以及K-means聚類算法的工作原理,可以直接跳到第4節「高斯混合模型簡介」。「聚類指根據數據的屬性或特徵將相似數據點分成一組」例如,我們有一組人的收入和支出,我們可以將他們分為以下幾類:

上面的每一組都是一個具有相似特徵的群體,因此針對性地向這些群體投放相關方案/產品非常有效。類似信用卡、汽車/房產貸款等的投放。簡單來說:「聚類背後的思想是將數據點分組在一起,這樣每個單獨的聚類都有著最為相似的點。」目前有各種各樣的聚類算法,最流行的聚類算法之一是K-means。讓我們了解K-means算法是如何工作的,以及該算法可能達不到預期的情況。二、K-means聚類簡介「K-means聚類是一種基於距離的聚類算法,這意味著它將試圖將最近的點分組以形成一個簇」。讓我們仔細看看這個算法是如何工作的,這將為後續了解高斯混合模型打下基礎。首先,我們先確定目標分組數量,這是K的數值,根據需要劃分的族或分組的數量,隨機初始化k個質心。然後將數據點指定給最近的質心,形成一個簇,接著更新質心,重新分配數據點。這個過程不斷重複,直到質心的位置不再改變。查看下面的gif,它代表初始化和更新簇的整個過程,假設簇數量為10:

請注意:這是K-means聚類的簡單概述,對於本文來說已經足夠了。如果你想深入研究k-means算法的工作原理,這裡有一個詳細指南:

最全面的K-mans指南,你永遠都需要:

https://www.analyticsvidhya.com/blog/2019/08/comprehensive-guide-k-means-clustering/?utm_source=blog&utm_medium=gaussian-mixture-models-clustering

三、K-means聚類缺點K-means聚類概念聽起來不錯,對吧?它易於理解,實現起來相對容易,並且可以應用在很多場景中,但有一些缺點和局限性需要我們注意。讓我們以上面提及的收支數據為例,K-means算法似乎運行得很好,對吧?等等,如果你仔細觀察,將會發現所有創建的簇都是圓形的,這是因為分類的質心都是使用平均值迭代更新的。現在,考慮下面的例子,其中點的分布不是圓形的,如果我們對這些數據使用K-means聚類,您認為會發生什麼?它仍然試圖以循環方式對數據點進行分組,那不太好!K-means會無法識別正確的分簇:

因此,我們需要一種不同的方法來將類分配給數據點。不再使用基於距離的模型,而是使用基於分布的模型,這就是高斯混合模型出現在本文的意義!四、高斯混合模型簡介「高斯混合模型(Gaussian Mixture Models ,GMMs)假設存在一定數量的高斯分布,並且每個分布代表一個簇。高斯混合模型傾向於將屬於同一分布的數據點分組在一起。」假設我們有三個高斯分布(在下一節中有更多內容)——GD1、GD2和GD3,它們分別具有給定的均值(μ1,μ2,μ3)和方差(σ1,σ2,σ3)。對於給定的一組數據點,我們的GMMs將計算這些數據點分別服從這些分布的概率。沒錯!高斯混合模型是一種概率模型,採用軟聚類方法將數據點歸入不同的簇中。在這裡,我們有三個簇,用三種顏色表示-藍色、綠色和青色。我們用紅色突出顯示一個數據點,這個點劃分進藍色簇的概率為1,而劃分進綠色簇或者青色簇的概率為0。

現在,考慮另一個點-介於藍色和青色簇之間(在下圖中突出顯示),這個點劃分進綠色簇的概率為0,對吧?而劃分進藍色、青色簇的概率分別是0.2,0.8。

高斯混合模型使用軟分類技術將數據點分配至對應的高斯分布,我肯定你想知道這些分布是什麼,我將在下一節解釋一下。五、高斯分布我相信你熟悉高斯分布(或正態分布),它有一個鐘形曲線,數據點圍繞平均值對稱分布。下圖有一些高斯分布,平均值(μ)和方差(σ2)不同。記住,σ值越大,分布曲線越寬。

但這隻適用於單個變量。在兩個變量的情況下,我們將得到如下所示的三維鐘形曲線,而不是二維鐘形曲線:

其中,x是輸入向量,μ是2維均值向量,∑是2×2協方差矩陣。協方差現在可以決定曲線的形狀。d維概率密度函數可以類似進行推廣。「因此,這個多元高斯模型將x和μ作為長度為d的向量,∑是一個d×d協方差矩陣。」對於具有d個特徵的數據集,我們將得到k個高斯分布(其中k相當於簇的數量),每個高斯分布都有一個特定的均值向量和方差矩陣,但是——這些高斯分布的均值和方差值是如何給定的?這些值可以用一種叫做期望最大化(Expectation-Maximization ,EM)的技術來確定,在深入研究高斯混合模型之前,我們需要了解這項技術。六、什麼是期望最大化「期望最大化就是尋找正確模型參數的統計算法,當數據有缺失值時,或者換句話說,當數據不完整時,我們通常使用EM。」這些值缺失的變量被稱為潛在變量,當我們研究無監督學習問題時,我們認為目標(或簇數)是未知的。由於這些潛在變量,很難確定正確的模型參數。這樣想吧:如果你知道哪個數據點屬於哪個簇,那麼就很容易確定均值向量和協方差矩陣。由於我們沒有這些潛在變量的值,EM試圖利用現有數據來確定這些變量的最優值,然後找到模型參數。基於這些模型參數,我們返回並更新潛在變量的值等等。EM是很多算法的基礎,包括高斯混合模型。那麼,GMM如何使用EM概念以及如何將其應用於給定的數據集?讓我們看看!七、高斯模型中的期望最大化讓我們用另一個例子來理解這一點,讀的時候需要你發揮下想像力來理解一些概念,這可以幫助你更好地理解我們在說些什麼。假設我們需要做K維聚類,這意味著存在k個高斯分布,平均值和協方差值為μ1、μ2、…、μk和∑1、∑2、…、∑k,此外,還有一個用於決定分布所用數據點數量的參數,換句話說,分布的密度用∏i表示。現在,我們需要確定這些參數的值來定義高斯分布。我們已經確定簇數量,並隨機分配了均值、協方差和密度的值,接下來,我們將執行E步驟和M步驟!對於每個點Xi,計算它屬於簇/分布C1、C2、…、CK的概率。使用以下公式完成此操作:

完成E步後,我們返回並更新∏,μ和∑值。更新方式如下:

2. 平均值和協方差矩陣根據分配給分布的值進行更新,與數據點的概率值成比例。因此,具有更高概率成為該分布一部分的數據點將貢獻更大的比例:

基於此步驟生成的更新值,我們計算每個數據點的新概率值并迭代更新。為了最大化對數似然函數,重複該過程。實際上我們可以說:K-means只考慮更新質心的均值,而GMMs則考慮更新數據的均值和方差!八、用Python實現高斯混合模型是時候深入研究代碼了!這是我在任何一篇文章中最喜歡的部分之一,所以我們馬上開始吧!我們將從加載數據開始,這是我創建的臨時文件,您可以從以下連結下載數據:

相關連結:

https://s3-ap-south-1.amazonaws.com/av-blog-media/wp-content/uploads/2019/10/Clustering_gmm.csv

import pandas as pddata = pd.read_csv('Clustering_gmm.csv')
plt.figure(figsize=(7,7))plt.scatter(data["Weight"],data["Height"])plt.xlabel('Weight')plt.ylabel('Height')plt.title('Data Distribution')plt.show()

這是我們的數據,現在此數據上建立一個K-means模型:
#training k-means modelfrom sklearn.cluster import KMeanskmeans = KMeans(n_clusters=4)kmeans.fit(data)
#predictions from kmeanspred = kmeans.predict(data)frame = pd.DataFrame(data)frame['cluster'] = predframe.columns = ['Weight', 'Height', 'cluster']
#plotting resultscolor=['blue','green','cyan', 'black']for k in range(0,4): data = frame[frame["cluster"]==k] plt.scatter(data["Weight"],data["Height"],c=color[k])plt.show()

那不太對,K-means模型無法識別正確的簇。仔細觀察簇中心——K-means試圖構建一個圓形簇,儘管數據分布都是橢圓形的(還記得我們之前討論過的缺點嗎?)。現在讓我們在相同的數據上建立一個高斯混合模型,看看是否可以改進K-means:
import pandas as pddata = pd.read_csv('Clustering_gmm.csv')
# training gaussian mixture modelfrom sklearn.mixture import GaussianMixturegmm = GaussianMixture(n_components=4)gmm.fit(data)
#predictions from gmmlabels = gmm.predict(data)frame = pd.DataFrame(data)frame['cluster'] = labelsframe.columns = ['Weight', 'Height', 'cluster']
color=['blue','green','cyan', 'black']for k in range(0,4): data = frame[frame["cluster"]==k] plt.scatter(data["Weight"],data["Height"],c=color[k])plt.show()

太棒啦!這些正是我們所希望的簇劃分!高斯混合模型已經把K-means擊敗啦!尾注這是高斯混合模型的入門指南,在這裡主要是向你介紹這種強大的聚類技術,並展示它與傳統算法相比是多麼有效和高效。我鼓勵你參加一個聚類項目,並嘗試使用GMMs。這是學習和理解一個概念的最好方法,相信我,你會意識到這個算法多麼有用!對高斯混合模型有什麼問題或想法,可以在下面評論區一起討論。

原文標題:

Build Better and Accurate Clusters with Gaussian Mixture Models

原文連結:

https://www.analyticsvidhya.com/blog/2019/10/gaussian-mixture-models-clustering/

作者簡介:張玲,在崗數據分析師,計算機碩士畢業。從事數據工作,需要重塑自我的勇氣,也需要終生學習的毅力。但我依舊熱愛它的嚴謹,痴迷它的藝術。數據海洋一望無盡,數據工作充滿挑戰。感謝數據派THU提供如此專業的平臺,希望在這裡能和最專業的你們共同進步!

END

轉自:數據派THU 公眾號

版權聲明:本號內容部分來自網際網路,轉載請註明原文連結和作者,如有侵權或出處有誤請和我們聯繫。

合作請加QQ:365242293  

數據分析(ID : ecshujufenxi )網際網路科技與數據圈自己的微信,也是WeMedia自媒體聯盟成員之一,WeMedia聯盟覆蓋5000萬人群。

相關焦點

  • 使用高斯混合模型,讓聚類更好更精確(附數據、代碼、學習資源)
    在我們開始討論高斯混合模型的本質之前,讓我們快速回顧一些基本概念。請注意:如果您已經熟悉了聚類背後的思想以及K-means聚類算法的工作原理,可以直接跳到第4節「高斯混合模型簡介」。不再使用基於距離的模型,而是使用基於分布的模型,這就是高斯混合模型出現在本文的意義!「高斯混合模型(Gaussian Mixture Models ,GMMs)假設存在一定數量的高斯分布,並且每個分布代表一個簇。高斯混合模型傾向於將屬於同一分布的數據點分組在一起。」
  • 獨家 | 使用高斯混合模型,讓聚類更好更精確(附數據&代碼&學習資源)
    它是一種我們可以在現實世界中準確無誤地使用的強大的無監督學習技術。「高斯混合模型是我在本文中即將要討論的一種聚類算法。」想要預測你最喜歡的產品銷售量嗎?或者你想要通過不同客戶群體的視角來剖析客戶流失。不管是什麼應用場景,你都會發現高斯混合模型是非常有用的。本文將採用自下而上的方法。
  • 如何利用高斯混合模型建立更好、更精確的集群?
    本文將帶你了解高斯混合模型的工作原理以及如何在 Python 中實現它們,我們還將討論 k-means 聚類算法,看看高斯混合模型是如何對它進行改進的。我真的很喜歡研究無監督的學習問題。相對於一個有監督的學習問題來說,它們提供了一個完全不同的挑戰——有更多的空間來試驗我的數據。難怪機器學習領域的大多數發展和突破都發生在無監督學習領域。無監督學習中最流行的技術之一是聚類。
  • 什麼是高斯混合模型
    作者:Oscar Contreras Carrasco翻譯:老齊圖書推薦:《數據準備和特徵工程》機器學習可以分為兩個主要領域:有監督學習和無監督學習。兩者的主要區別在於數據的性質以及處理數據的方法。聚類是一個無監督學習的算法,利用這個算法可以從數據集裡找到具有共性的點簇。
  • 高斯混合模型(GMM):理念、數學、EM算法和python實現
    高斯混合模型是一種流行的無監督學習算法。GMM方法類似於K-Means聚類算法,但是由於其複雜性,它更健壯,更有用。K-means聚類使用歐式距離函數來發現數據中的聚類。只要數據相對於質心呈圓形分布,此方法就可以很好地工作。
  • 達觀數據陳運文:一文詳解高斯混合模型原理
    什麼是高斯混合模型(Gaussian Mixture Model)高斯混合模型(Gaussian Mixture Model)通常簡稱GMM,是一種業界廣泛使用的聚類算法,該方法使用了高斯分布作為參數模型,並使用了期望最大
  • 高斯混合模型 1
    無監督學習可以看成是「沒有老師情況下的學習」,因為只有數據本身,沒有監督學習裡的標籤,也沒有強化學習裡的反饋。這裡我們介紹一種聚類方法,高斯混合模型(Gaussian mixture model)。(這裡要和mixed model區分開來,mixed model是一種統計模型,主要用來處理重複測量,或者有群組效應的數據,可以認為是一種監督學習方法)。
  • 淺談高斯混合模型
    通常,觀測數據加上隱變量構成的數據集稱為完全數據 (complete data)。EM算法的主要思想為,在觀測數據的似然函數中加入隱變量,將原本複雜、或難以表示的似然函數改寫為關於完全數據的似然函數。完全數據的似然函數常常能夠讓問題的描述形式變得更清晰。在高斯混合模型裡,我們可以定義隱變量為:每個觀測和高斯成分之間的對應關係。
  • ML基礎:高斯混合模型是什麼?
    1.高斯混合模型概念高斯混合模型是一種概率模型,它假設所有數據點都是從有限數量的高斯分布的混合參數中生成的。實際上,可以將混合模型視為對 k-means聚類算法的擴展,它包含了數據的協方差結構以及隱高斯模型中心的信息。該方法使用了高斯分布作為參數模型,並使用了期望最大(Expectation Maximization,簡稱EM)算法進行訓練。
  • 【機器學習】詳解高斯混合模型及其實現
    在知乎上看到一篇有價值的文章,分享給學習機器學習、深度學習、智能科學的朋友:高斯混合模型(Gaussian Mixed Model
  • 技術乾貨 | 一文詳解高斯混合模型原理
    高斯混合模型(Gaussian Mixture Model)通常簡稱GMM,是一種業界廣泛使用的聚類算法,該方法使用了高斯分布作為參數模型
  • 【聚類】五種主要聚類算法
    這是因為當密度變化時,距離閾值ε和識別鄰近點的minPoints的設置會隨著聚類的不同而變化。這種缺點也會出現在非常高維的數據中,因為距離閾值ε變得難以估計。使用高斯混合模型(GMM)的期望最大化(EM)聚類K-Means的一個主要缺點是它對聚類中心的平均值的使用很簡單幼稚。我們可以通過看下面的圖片來了解為什麼這不是最好的方法。
  • 比elbow方法更好的聚類評估指標
    剛開始的時候,我們如何知道聚類的實際數量呢?這個問題非常重要,因為聚類的過程通常是進一步處理單個聚類數據的前置問題,因此計算資源的數量可能依賴於這種度量。在業務分析問題的情況下,後果可能更糟。聚類通常是為了市場細分的目標而進行的分析。
  • 如何為數據集選擇正確的聚類算法?
    分層聚類基於整個數據集對象之間距離的計算,聚類稱為基於連通性或分層。根據算法的「方向」,它可以組合或反過來劃分信息數組- 聚集和分裂的名稱正是源於這種精確的變化。最為流行和合理的類型是聚集型,您可以從輸入數據點的數量開始,然後將這些數據點組合成越來越大的簇,直到達到極限。
  • 如何正確選擇聚類算法?|CSDN博文精選
    作者 | Josh Thompson翻譯 | 張睿毅校對 | 王雨桐本文將介紹四種基本的聚類算法—層次聚類、基於質心的聚類、最大期望算法和基於密度的聚類算法,並討論不同算法的優缺點。聚類算法十分容易上手,但是選擇恰當的聚類算法並不是一件容易的事。數據聚類是搭建一個正確數據模型的重要步驟。
  • 想入門機器學習?機器之心為你準備了一份中文資源合集
    我建議還可以把它當作貝葉斯問題,使用之前的可能性展示參數(比如,高斯分布),優化變成了最大似然估計(Maximum Likelihood Estimation,MLE)。即使這看起來更加複雜,但該方法提供了一個可供幾十個其他複雜模型共享的新方法。
  • 相異數據的等距高斯過程潛在變量模型
    生成手段允許這些方法擴展到可視化之外,例如缺失數據插補、數據擴充和半監督任務。在本文中,我們使用高斯過程來學習一個黎曼流形,在這個過程中,流形上的距離與黎曼假設所指的局部距離相匹配。假設觀測數據位於具有無限內射半徑的 RD 的黎曼 q-子流形上,那麼我們的方法可以學習到與原始流形等距的 q 維表示。
  • 理解高斯混合模型中期望最大化的M-Step
    在本篇文章中將解釋高斯混合模型(GMM)的關鍵部分背後的數學原理,即期望最大化(EM),以及如何將這些概念轉換為Python。 這個故事的重點是EM或M-Step。  注意:這不是有關端到端GMM算法的全面說明。 要進行更深入的研究,請參閱我們以前翻譯的文章。
  • 詳解 EM 算法和 高斯混合模型
    ,第一次聽說是在NLP課中的HMM那一節,為了解決HMM的參數估計問題,使用了EM算法。比如要將班上學生聚類,假設隱藏變量z是身高,那麼就是連續的高斯分布。如果按照隱藏變量是男女,那麼就是伯努利分布了。可以由前面闡述的內容得到下面的公式:
  • 只需十四步:從零開始掌握Python機器學習(附資源)
    毫無疑問,資源確實有很多,但哪些才是最好的呢?哪些是互補的呢?以怎樣的順序學習這些資源才是最合適的呢?首先,我假設你並不是以下方面的專家:當然,如果你對前兩個主題有一定程度的基本了解就更好了,但那並不是必要的,在早期階段多花一點點時間了解一下就行了。