2

我想使用 sklearn.mixture.GMM 将高斯混合拟合一些数据,结果类似于我使用 R 的“Mclust”包得到的结果。

数据如下所示: 在此处输入图像描述

所以这就是我使用 R 对数据进行聚类的方法,它给了我 14 个很好分离的聚类,而且很容易从楼梯上掉下来:

data <- read.table('~/gmtest/foo.csv',sep=",")
library(mclust)
D = Mclust(data,G=1:20)
summary(D)
plot(D, what="classification")

这就是我在使用 python 尝试时所说的话:

from sklearn import mixture
import numpy as np
import os
import pyplot

os.chdir(os.path.expanduser("~/gmtest"))
data = np.loadtxt(open('foo.csv',"rb"),delimiter=",",skiprows=0)
gmm = mixture.GMM( n_components=14,n_iter=5000, covariance_type='full')
gmm.fit(data)

classes = gmm.predict(data)
pyplot.scatter(data[:,0], data[:,1], c=classes)
pyplot.show()

它将所有点分配给同一个集群。我还注意到,当我告诉它找到 1 个集群时,拟合的 AIC 最低,并且随着集群数量的增加线性增加。我究竟做错了什么?我需要考虑其他参数吗?

Mclust 和 sklearn.mixture 使用的模型有区别吗?

但更重要的是:sklearn 中对我的数据进行聚类的最佳方式是什么?

4

1 回答 1

1

诀窍是设置 GMM 的min_covar。所以在这种情况下,我得到了很好的结果:

mixture.GMM( n_components=14,n_iter=5000, covariance_type='full',min_covar=0.0000001)

min_covar的大默认值将所有点分配给一个集群。

于 2015-02-10T18:19:35.827 回答