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

Posted

技术标签:

【中文标题】如何在 Scikit-learn 中使用“狄利克雷过程高斯混合模型”? (n_components?)【英文标题】:How to use `Dirichlet Process Gaussian Mixture Model` in Scikit-learn? (n_components?) 【发布时间】:2016-12-29 14:25:57 【问题描述】:

我对“以狄利克雷过程作为聚类数量的先验分布的无限混合模型”的理解是,聚类数量由数据决定,因为它们收敛到一定数量的聚类。

这个R Implementationhttps://github.com/jacobian1980/ecostates以这种方式决定集群的数量。虽然 R implementation 使用 Gibbs 采样器,但我不确定这是否会影响这一点。

让我感到困惑的是n_components 参数。 n_components: int, default 1 : Number of mixture components. 如果分量的个数是由数据和狄利克雷过程决定的,那么这个参数是什么?


最终,我想得到:

(1) 每个样本的聚类分配;

(2) 每个簇的概率向量;和

(3) 每个样本的似然/对数似然。

看起来 (1) 是 predict 方法,(3) 是 score 方法。但是,(1) 的输出完全取决于n_components 超参数。

如果这是一个幼稚的问题,我深表歉意,我对贝叶斯编程非常陌生,并注意到 Scikit-learn 中有 Dirichlet Process 我想尝试一下。


这是文档: http://scikit-learn.org/stable/modules/generated/sklearn.mixture.DPGMM.html#sklearn.mixture.DPGMM

这是一个使用示例: http://scikit-learn.org/stable/auto_examples/mixture/plot_gmm.html

这是我的幼稚用法:

from sklearn.mixture import DPGMM
X = pd.read_table("Data/processed/data.tsv", sep="\t", index_col=0)
Mod_dpgmm = DPGMM(n_components=3)
Mod_dpgmm.fit(X)

【问题讨论】:

不太了解这种模型,但是在doco中,他们称n_components为“截断参数”,所以我猜组件的数量是由数据决定的,但是你必须指定一个上限。 哦,这是一个上限?我尝试添加我拥有的最大样本数(42),最终得到了 42 个集群。我认为这可能会迫使他们进入这么多的集群。当我使用上面列出的 R 实现进行 2000 次迭代的 Gibbs 采样时,我得到了 3 个集群。 不确定,也许可以试试convariance_typealpha 等其他参数? @maxymoo 我今天要搞砸它,让你知道。感谢您的建议。 【参考方案1】:

正如@maxymoo 在 cmets 中提到的,n_components 是一个截断参数。

在中餐厅流程的上下文中,这与 sklearn 的 DP-GMM 中的断棍表示有关,一个新的数据点以 |k| / n-1+alpha 的概率加入现有集群 k 并且开始 em> 概率为alpha / n-1 + alpha 的新集群。该参数可以理解为狄利克雷过程的浓度参数,它会影响最终的簇数。

与使用 Gibbs 采样的 R 实现不同,sklearn 的 DP-GMM 实现使用变分推理。这可能与结果的差异有关。

一个温和的狄利克雷过程教程可以找到here。

【讨论】:

【参考方案2】:

现在 DPGMM 类已弃用。 如警告所示: DeprecationWarning:不推荐使用 DPGMM 类; DPGMM 类不能正常工作,最好使用带有参数weight_concentration_prior_type='dirichlet_process'sklearn.mixture.BayesianGaussianMixture 类。 DPGMM 在 0.18 中已弃用,并将在 0.20 中删除。

【讨论】:

以上是关于如何在 Scikit-learn 中使用“狄利克雷过程高斯混合模型”? (n_components?)的主要内容,如果未能解决你的问题,请参考以下文章

Sklearn 潜在狄利克雷分配如何真正起作用?

如何实现潜在狄利克雷分配以在主题中给出二元组/三元组而不是一元组

潜在狄利克雷分配(LDA)

在潜在狄利克雷分配后获得重复项

使用 PyMC 实现潜在狄利克雷分配 (LDA)

Latent Dirichlet Allocation(隐狄利克雷分配模型)——论文翻译与分析