高斯混合模型(GMM)
2020-06-28 12:44:24 来源:易采站长站 作者:易采站长站整理
# update sigmas
cov = np.zeros_like(self.sigmas[0])
for j, x in enumerate(X):
d = (x - self.mus[i]).reshape(self.dim,1)
cov += z[j][i] * d @ d.T
cov /= sum(z[:, i])
self.sigmas[i] = cov
# update alphas
self.alphas[i] = sum(z[:, i]) / len(X)
return self.mus, self.sigmas, self.alphas, z
model = GMM(k=3,dim=2)
mus, sigmas, alphas, z = model.fit(data)
利用高斯混合模型聚类
labels = np.argmax(z, axis=1)plt.scatter(data[:,0], data[:,1],c=labels, lw=1)
plt.plot(*mus.T, 'ro')

这里只迭代了 10 次,所以效果还不是最好
画出概率密度函数
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3DX = np.arange(-5, 20, 0.2)
Y = np.arange(-10, 15, 0.2)
X, Y = np.meshgrid(X, Y)
points = np.hstack((X.reshape((-1,1)), Y.reshape((-1,1))))
Z = model.multi_gaussian_prob(points).reshape(X.shape)
fig = plt.figure(figsize=(10,10))
ax = Axes3D(fig)
ax.view_init(elev=90., azim=-90) # 调整3D视角
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

作者:颹蕭蕭













闽公网安备 35020302000061号