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

问题描述 投票:2回答:2

我正在尝试使用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

scipy statistics scikit-learn
2个回答
1
投票

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

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

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.