我想使用sklearn.mixture.GMM来适应一些数据的混合高斯,结果类似于我使用R的“Mclust”包得到的结果。高斯混合使用scikit学习混合
的数据是这样的:
因此,这里就是我的集群中使用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来聚集我的数据?
Mclust默认使用完全协方差吗? – 2015-02-11 00:12:34