【发布时间】:2015-04-10 21:49:28
【问题描述】:
我想使用 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 中对我的数据进行聚类的最佳方式是什么?
【问题讨论】:
-
Mclust 默认使用全协方差吗?
标签: python r scikit-learn mixture-model