用高斯混合模型分类三维数据

理论

高斯混合模型的和详细的EM算法推导见《统计学习方法》
这里说明一点:

EM算法叫期望极大算法,是先在当前参数下求得完全分布对于隐变量的期望,然后求解对数似然的最大化问题,以获得新一轮迭代的参数。
其中核心在于Q函数 Q ( θ , θ ( i ) ) Q(\theta,\theta^{(i)}) Q(θ,θ(i))
Q函数是完全数据的对数似然函数 l o g P ( Y , Z ∣ θ ) logP(Y,Z|\theta) logP(Y,Zθ),关于在给定的观测数据 Y Y Y和当前参数 θ ( i ) \theta^{(i)} θ(i)下对未观测数据 Z Z Z的条件概率分布 P ( Z ∣ Y , θ ( i ) ) P(Z|Y, \theta^{(i)}) P(ZY,θ(i))的期望
Q ( θ , θ i ) = E Z [ l o g P ( Y , Z ∣ θ ) ∣ Y , θ i ] = ∑ Z l o g P ( Y , Z ∣ θ ) P ( Z ∣ Y , θ i ) \begin{aligned} Q(\theta,\theta^i)&=E_{Z}[logP(Y,Z|\theta)|Y,\theta^i]\\ &=\sum_{Z}logP(Y,Z|\theta)P(Z|Y,\theta^i) \end{aligned} Q(θ,θi)=EZ[logP(Y,Zθ)Y,θi]=ZlogP(Y,Zθ)P(ZY,θi)

python实现

sklearn有完整的实现

参考:

高斯混合模型(GMM)应用
详解EM算法和高斯混合模型
sklearn的API接口非常丰富,用sklearn实现EM算法代码量很少。
这里用三维的高斯分布产生实验样本,并8:2分割训练测试。

#产生实验数据
from sklearn.datasets.samples_generator import make_blobs
X, y_true = make_blobs(n_samples=1000, centers=4, n_features=3,
                       cluster_std=0.7, random_state=0, )


X_train = X[:800]
X_test = X[800:]
from sklearn.mixture import GaussianMixture as GMM
gmm = GMM(n_components=4).fit(X_train)
labels = gmm.predict(X_test)
probs = gmm.predict_proba(X_test)

fig, ax= plt.subplots()
ax = plt.axes(projection='3d')
ax.scatter3D(X_test[:,0],X_test[:,1], X_test[:,2], c = labels)
plt.show()

三维数据分类结果
下面用T-SNE降维对分类结果可视化

from sklearn.manifold import TSNE
ts = TSNE(n_components = 2, init='pca')
y = ts.fit_transform(X_test)
print(y.shape)
fig, ax = plt.subplots()
ax.scatter(y[:,0], y[:, 1], c = labels)
plt.show()

在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页