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

时间:2016-07-22 13:56:48

标签: scipy statistics scikit-learn

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

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse webResponse;
using (webResponse = (HttpWebResponse)webRequest.GetResponse())
{
    //myThings
}
//FIN+ACK

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

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

提前多多感谢,

的Lukas

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

2 个答案:

答案 0 :(得分:1)

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

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

  

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

答案 1 :(得分:0)

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

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