【问题标题】:sklearn mixture.GMM in python using univariate GMMsklearn mix.GMM在python中使用单变量GMM
【发布时间】:2018-09-15 11:46:43
【问题描述】:

在 R 中,mclust 有一个参数“modelNames”,您可以在其中定义要实现的模型。我希望在 python 中的 mix.GMM 下的 mclust 中进行单变量建模,它也是 modelNames <- 'V'。但是,我发现唯一可以调整的是 covariance_type。尽管如此,当我在 sklearn 下使用 R 和 mixture.GMM 运行相同的数据时,尽管安装的组件数量相同,但我得到了不同的拟合。我可以在mixture.GMM 中更改什么以表明我正在使用单变量变量方差?

mclust 代码:

function(x){Mclust(ma78[x,],G=2,modelNames="V",verbose=FALSE)}

GMM 代码:

gmm = GMM(n_components = 2).fit(data)

【问题讨论】:

  • 您应该发布您正在使用的代码。这样就很容易理解了。
  • 您好,感谢您的回复。我不知道这是否会有所帮助。谢谢!主要问题是我不知道在 mix.GMM 下该怎么做,以确保它适合单变量模型而不是多变量。

标签: python r scikit-learn gmm mclust


【解决方案1】:

对于单变量数据,协方差可以是相等的,也可以是唯一的(变量)。对于Mclust,这些选项分别为modelNames = "E""V"

对于sklearn,它们似乎是covariance_type = "tied""full"。对于可变高斯混合模型,可能是这样的

gmm = mixture.GaussianMixture(n_components = 2, covariance_type='full').fit(data)

即使单独使用Mclustsklearn,也可能会出现这样的情况,即您可能不会在不同的运行中获得相同的参数值 - 这是因为估计值可能取决于初始值。避免这种情况的一种方法是在此类选项可用的情况下使用更多的启动次数。

【讨论】:

  • 谢谢。我想指出,我通过将参数 'tol' 更改为 1e-5 而不是默认的 1e-3 部分解决了问题,这是 mclust 设置的 tol 让我得到更接近的结果。谢谢!
【解决方案2】:

stats.stackexchange 上找到了答案。您唯一需要做的就是在将数据传递到 sklearn.mixture.GaussianMixture 之前重塑您的数据 data.reshape(-1, 1)

安德烈亚斯

【讨论】:

    猜你喜欢
    • 2017-12-08
    • 2015-02-13
    • 1970-01-01
    • 2020-02-11
    • 2017-09-03
    • 2015-02-10
    • 2015-05-19
    • 2014-02-27
    • 2017-05-20
    相关资源
    最近更新 更多