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

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

作者:AISHWARYA SINGH

翻譯:張玲

校對:張一豪

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

本文簡單介紹聚類的基礎知識,包括快速回顧K-means算法,然後深入研究高斯混合模型的概念,並用Python實現。

概述

  • 高斯混合模型是一種強大的聚類算法
  • 瞭解高斯混合模型的工作原理以及如何在Python中實現它們
  • 我們還將討論K-means聚類算法,看看高斯混合模型是如何改進它的

簡介

我真的很喜歡研究無監督的學習問題,因為它們提供了一個完全不同於監督學習問題的挑戰:提供更大的空間來試驗我的數據。這也不難理解機器學習領域的大多數發展和突破都發生在無監督學習這一塊。


無監督學習中最流行的技術之一是聚類,這通常我們在早期學習機器學習時學習的概念,而且很容易掌握。我相信你已經遇到過,甚至參與過用戶分層、市場購物籃分析等項目。

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

但問題是,聚類有很多種,不只侷限於我們之前學過的基本算法。它是一種我們可以在現實世界中準確無誤地使用的強大的無監督學習技術。

“高斯混合模型是我在本文中即將要討論的一種聚類算法。”
想要預測你最喜歡的產品銷售量嗎?或者你想要通過不同客戶群體的視角來剖析客戶流失。不管是什麼應用場景,你都會發現高斯混合模型是非常有用的。

本文將採用自下而上的方法。首先,我們學習聚類的基礎知識,包括快速回顧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)不同。記住,σ值越大,分佈曲線越寬。

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

在一維空間中,高斯分佈的概率密度函數由下式給出:

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

其中μ是平均值,σ2是方差。

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

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

概率密度函數由以下公式給出:



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

其中,x是輸入向量,μ是2維均值向量,∑是2×2協方差矩陣。協方差現在可以決定曲線的形狀。d維概率密度函數可以類似進行推廣。

“因此,這個多元高斯模型將x和μ作為長度為d的向量,∑是一個d×d協方差矩陣。”

對於具有d個特徵的數據集,我們將得到k個高斯分佈(其中k相當於簇的數量),每個高斯分佈都有一個特定的均值向量和方差矩陣,但是——這些高斯分佈的均值和方差值是如何給定的?

這些值可以用一種叫做期望最大化(Expectation-Maximization ,EM)的技術來確定,在深入研究高斯混合模型之前,我們需要了解這項技術。

六、什麼是期望最大化

好問題!

“期望最大化就是尋找正確模型參數的統計算法,當數據有缺失值時,或者換句話說,當數據不完整時,我們通常使用EM。”

這些值缺失的變量被稱為潛在變量,當我們研究無監督學習問題時,我們認為目標(或簇數)是未知的。

由於這些潛在變量,很難確定正確的模型參數。這樣想吧:如果你知道哪個數據點屬於哪個簇,那麼就很容易確定均值向量和協方差矩陣。

由於我們沒有這些潛在變量的值,EM試圖利用現有數據來確定這些變量的最優值,然後找到模型參數。基於這些模型參數,我們返回並更新潛在變量的值等等。

廣義上,EM有2個步驟:

  • E-步驟:在這個步驟中,利用可用的數據來估算(猜測)潛在變量的值。
  • M-步驟:根據E步驟中生成的估計值,使用完整的數據更新參數。

EM是很多算法的基礎,包括高斯混合模型。那麼,GMM如何使用EM概念以及如何將其應用於給定的數據集?讓我們看看!

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

讓我們用另一個例子來理解這一點,讀的時候需要你發揮下想象力來理解一些概念,這可以幫助你更好地理解我們在說些什麼。

假設我們需要做K維聚類,這意味著存在k個高斯分佈,平均值和協方差值為μ1、μ2、…、μk和∑1、∑2、…、∑k,此外,還有一個用於決定分佈所用數據點數量的參數,換句話說,分佈的密度用∏i表示。

現在,我們需要確定這些參數的值來定義高斯分佈。我們已經確定簇數量,並隨機分配了均值、協方差和密度的值,接下來,我們將執行E步驟和M步驟!

E步驟:

對於每個點Xi,計算它屬於簇/分佈C1、C2、…、CK的概率。使用以下公式完成此操作:

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

該值高時表示點被分配至正確的簇,反之則低。

M步驟:



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

1. 新分佈密度由簇中的點數與總點數的比率定義:

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

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提供如此專業的平臺,希望在這裡能和最專業的你們共同進步!

— 完 —

關注清華-青島數據科學研究院官方微信公眾平臺“THU數據派”及姊妹號“數據派THU”獲取更多講座福利及優質內容。


分享到:


相關文章: