本文約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
相關連結:
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萬人群。