使用scikit的高斯混合物学习混合物

时间:2015-02-10 18:16:11

标签: python r scikit-learn mixture-model

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

数据如下所示: enter image description here

所以这里是我如何使用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将数据聚类的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

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

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

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