【问题标题】:Mixture of Gaussians using scikit learn mixture使用 scikit 学习混合的高斯混合
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 您的数据是如何缩放的?我不确定默认值是否是比例不变的,也许我们应该改变它......
  • 我没想过缩放数据。如果我说:data=scale(data) 然后gmm.fit(data),它适用于默认的 min_covar
猜你喜欢
  • 2016-03-17
  • 1970-01-01
  • 2023-04-10
  • 2015-08-11
  • 2017-04-21
  • 2021-09-30
  • 2013-08-25
  • 1970-01-01
  • 2018-07-16
相关资源
最近更新 更多