Scikit-Learn的DPGMM配件:组件数量?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scikit-Learn的DPGMM配件:组件数量?相关的知识,希望对你有一定的参考价值。

我正在尝试使用scikit-learn的DPGMM算法将混合正态模型拟合到某些数据。在[0]上公布的优点之一是我不需要指定组件的数量;这很好,因为我不知道我的数据中的组件数量。文档说明我只需要指定一个上限。但是,它看起来非常像是不正确的:

>>> data = numpy.random.normal(loc = 0.0, scale = 1.0, size = 1000) 
>>> from sklearn.mixture import DPGMM
>>> d = DPGMM(n_components=5)
>>> d.fit(data.reshape(-1,1))
DPGMM(alpha=1.0, covariance_type='diag', init_params='wmc', min_covar=None,
   n_components=5, n_iter=10, params='wmc', random_state=None, thresh=None,
   tol=0.001, verbose=0)
>>> d.n_components
5
>>> d.means_
array([[-0.02283383],
       [ 0.06259168],
       [ 0.00390097],
       [ 0.02934676],
       [-0.05533165]])

如您所见,拟合报告了五个组成部分(上限),即使是仅从一个正态分布中清晰采样的数据也是如此。

难道我做错了什么?我误解了什么吗?

非常感谢提前,

卢卡斯

[0] http://scikit-learn.org/stable/modules/mixture.html#dpgmm

答案

我最近对这个DPGMM实施的结果有类似的疑虑。如果您检查提供的example,您会注意到DPGMM总是返回带有n_components的模型,现在的诀窍是删除冗余组件。这可以通过预测功能完成。

不幸的是,这个重要的pice隐藏在代码示例中的注释中。

#,因为DP不会使用它可以访问的每个组件 #除非需要,否则我们不应该绘制冗余组件

另一答案

也许看看使用改进的sklearn解决方案来解决这类问题,即Bayesian Gaussian Mixture。使用此模型,必须给出建议的先前组件数量,但是一旦经过训练,模型就会为每个组件分配权重,这基本上表明了它们的相关性。 Here是一个非常酷的BGMM视觉演示。

一旦您尝试在数据上训练了几个BGMM,您就可以对给定问题的组件数量进行合理的估计。

以上是关于Scikit-Learn的DPGMM配件:组件数量?的主要内容,如果未能解决你的问题,请参考以下文章

BIC 使用来自 scikit-learn 的 GaussianMixture 过度拟合图像分割模型中的组件数量

sklearn.mixture.DPGMM:意外结果

Scikit-Learn RFECV 仅基于网格分数的特征数量

当我尝试为 scikit-learn 模型拟合另外 1 个功能时,出现此错误“ValueError:找到样本数量不一致的输入变量”

Scikit-Learn 朴素贝叶斯分类丨数析学院

如何在 Scikit-learn 中使用“狄利克雷过程高斯混合模型”? (n_components?)