快速學會一個機器學習算法:高斯混合模型
在數(shù)據(jù)科學和機器學習領域,聚類分析是一種重要的無監(jiān)督學習方法,用于發(fā)現(xiàn)數(shù)據(jù)中的潛在模式和結(jié)構(gòu)。高斯混合模型(Gaussian Mixture Model,簡稱GMM)作為一種強大的概率模型,在聚類分析中具有廣泛的應用。本文將詳細介紹GMM聚類的算法原理、數(shù)學基礎,并通過一個案例分析展示其實際應用。
一、GMM算法簡介
高斯混合模型(GMM)是一種基于概率的聚類方法,假設數(shù)據(jù)集由多個高斯分布(也稱為“成分”或“簇”)混合生成。與K-Means等傳統(tǒng)聚類算法不同,GMM不僅考慮簇的中心,還考慮簇的形狀和大小,通過估計每個數(shù)據(jù)點屬于各個簇的概率,實現(xiàn)更為靈活和準確的聚類效果。
GMM在以下場景中表現(xiàn)出色:
- 復雜數(shù)據(jù)分布:適用于簇形狀不規(guī)則、大小不一的數(shù)據(jù)集。
- 軟聚類:允許數(shù)據(jù)點屬于多個簇,適用于模糊邊界的聚類任務。
- 概率解釋:提供每個數(shù)據(jù)點的聚類概率,有助于后續(xù)的統(tǒng)計分析和決策。
二、GMM算法原理
2.1 概率模型
2.2 期望最大化(EM)算法
GMM的參數(shù)估計通常采用期望最大化(Expectation-Maximization,EM)算法。EM算法是一種迭代優(yōu)化方法,適用于含有隱含變量或不完全數(shù)據(jù)的概率模型。
EM算法包含兩個主要步驟,E步(期望步)和M步(最大化步),反復迭代直到收斂。
- E步(Expectation Step)
在當前參數(shù)估計值 下,計算每個數(shù)據(jù)點屬于第 個高斯成分的后驗概率(即責任度):
- M步(Maximization Step)
基于E步計算的責任度,重新估計模型參數(shù):
- 收斂條件
EM算法在每次迭代中都會增加似然函數(shù)的值,直到似然函數(shù)的增幅低于預設的閾值或達到最大迭代次數(shù)時停止。
三、案例分析:GMM聚類實戰(zhàn)
本文將通過一個簡單的案例,使用Python實現(xiàn)GMM聚類,展示其在模擬數(shù)據(jù)上的應用效果。
3.1 數(shù)據(jù)生成
首先,我們生成一個包含三個不同簇的二維數(shù)據(jù)集,每個簇的數(shù)據(jù)點服從不同的高斯分布。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture
import matplotlib.patches as patches
import matplotlib.colors as mcolors
# 設置隨機種子
np.random.seed(42)
# 生成三個高斯分布的樣本
n_samples = 500
# 第一個簇
mean1 = [2, 0]
cov1 = [[1, 0.2], [0.2, 1]]
X1 = np.random.multivariate_normal(mean1, cov1, n_samples)
# 第二個簇
mean2 = [3, 3]
cov2 = [[1, -0.3], [-0.3, 1]]
X2 = np.random.multivariate_normal(mean2, cov2, n_samples)
# 第三個簇
mean3 = [0, 3]
cov3 = [[1, 0], [0, 1]]
X3 = np.random.multivariate_normal(mean3, cov3, n_samples)
# 合并數(shù)據(jù)
X = np.vstack((X1, X2, X3))
# 繪制原始數(shù)據(jù)點圖
plt.figure(figsize=(10, 8))
plt.scatter(X1[:, 0], X1[:, 1], s=30, color='red', label='簇 1', alpha=0.6)
plt.scatter(X2[:, 0], X2[:, 1], s=30, color='green', label='簇 2', alpha=0.6)
plt.scatter(X3[:, 0], X3[:, 1], s=30, color='blue', label='簇 3', alpha=0.6)
plt.title('原始數(shù)據(jù)點分布', fontsize=16)
plt.xlabel('特征1', fontsize=14)
plt.ylabel('特征2', fontsize=14)
plt.legend(title='原始簇類別')
plt.grid(True, linestyle='--', alpha=0.5)
plt.tight_layout()
plt.show()
原始數(shù)據(jù)散點圖:
3.2 GMM聚類實現(xiàn)
使用Scikit-learn庫中的??GaussianMixture?
?類實現(xiàn)GMM聚類,并預測數(shù)據(jù)點的簇標簽。
# 定義GMM模型,假設有3個簇
gmm = GaussianMixture(n_compnotallow=3, covariance_type='full', random_state=42)
# 擬合GMM模型
gmm.fit(X)
# 預測簇標簽
labels = gmm.predict(X)
# 獲取GMM的參數(shù)
weights = gmm.weights_
means = gmm.means_
covariances = gmm.covariances_
print("GMM混合權(quán)重:", weights)
print("GMM均值:\n", means)
print("GMM協(xié)方差矩陣:\n", covariances)
輸出結(jié)果:
GMM混合權(quán)重: [0.34443739 0.3287613 0.32680131]
GMM均值:
[[ 2.95728907 3.11741938]
[-0.04155174 2.96571577]
[ 1.9849524 -0.00788892]]
GMM協(xié)方差矩陣:
[[[ 0.99816731 -0.25715754]
[-0.25715754 1.02762528]]
[[ 0.91888485 -0.01749 ]
[-0.01749 0.96829226]]
[[ 0.89100266 0.17762317]
[ 0.17762317 0.95128116]]]
3.3 結(jié)果可視化
繪制聚類結(jié)果和高斯分布的等高線,直觀展示GMM的聚類效果。
# 定義顏色
colors = list(mcolors.TABLEAU_COLORS.values())
plt.figure(figsize=(12, 8))
# 繪制數(shù)據(jù)點
for i in range(gmm.n_components):
plt.scatter(X[labels == i, 0], X[labels == i, 1],
s=30, color=colors[i], label=f'簇 {i+1}', alpha=0.5)
# 繪制高斯分布的等高線
ax = plt.gca()
for i in range(gmm.n_components):
mean = means[i]
cov = covariances[i]
eigenvalues, eigenvectors = np.linalg.eigh(cov)
order = eigenvalues.argsort()[::-1]
eigenvalues, eigenvectors = eigenvalues[order], eigenvectors[:, order]
angle = np.degrees(np.arctan2(*eigenvectors[:,0][::-1]))
width, height = 2 * np.sqrt(eigenvalues)
ellipse = patches.Ellipse(mean, width, height, angle=angle,
edgecolor=colors[i], facecolor='none',
linewidth=3, linestyle='--')
ax.add_patch(ellipse)
plt.title('GMM聚類結(jié)果', fnotallow=16)
plt.xlabel('特征1', fnotallow=14)
plt.ylabel('特征2', fnotallow=14)
plt.legend(title='簇類別')
plt.grid(True, linestyle='--', alpha=0.5)
plt.tight_layout()
plt.show()
GMM聚類結(jié)果圖:
結(jié)果分析:
通過上述代碼,我們生成了一個包含三個簇的二維數(shù)據(jù)集,并使用GMM進行聚類。結(jié)果顯示,GMM能夠準確地識別出數(shù)據(jù)中的三個簇,并通過等高線展示了各個高斯成分的分布情況。相比于K-Means,GMM在處理具有不同形狀和大小的簇時表現(xiàn)出更高的靈活性和準確性。
四、總結(jié)
高斯混合模型(GMM)作為一種基于概率的聚類方法,能夠有效地處理復雜數(shù)據(jù)分布和模糊邊界的聚類任務。通過期望最大化(EM)算法,GMM能夠迭代地估計模型參數(shù),實現(xiàn)對數(shù)據(jù)的準確聚類。本文通過理論介紹和實戰(zhàn)案例,展示了GMM在機器學習中的應用及其優(yōu)勢。盡管GMM在處理高維數(shù)據(jù)和選擇適當?shù)拇財?shù)時可能面臨挑戰(zhàn),但其靈活性和概率解釋能力使其成為聚類分析中不可或缺的工具。
在實際應用中,結(jié)合領域知識選擇合適的模型參數(shù)和評估指標,可以進一步提升GMM的聚類效果。同時,結(jié)合其他機器學習方法,如降維技術和特征工程,可以增強GMM在復雜數(shù)據(jù)場景下的表現(xiàn)。
本文轉(zhuǎn)載自寶寶數(shù)模AI,作者:BBSM
