如何在Scikit-learn中使用`Dirichlet Process Gaussian Mixture Model`? (n_components?)

时间:2016-08-22 22:25:55

标签: python machine-learning statistics scikit-learn bayesian

我对“Dirichlet过程的无限混合模型作为聚类数量的先验分布”的理解是,聚类的数量是由数据收集到一定数量的聚类时确定的。 / strong>

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

令我困惑的是n_components参数。 n_components: int, default 1 : Number of mixture components. 如果组件数量由数据和Dirichlet流程确定,那么此参数是什么?

最终,我想要:

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

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

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

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

如果这是一个天真的问题,我很抱歉,我对贝叶斯编程很新,并注意到Dirichlet Process中有Scikit-learn我想尝试一下。

这是文档: 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)

2 个答案:

答案 0 :(得分:5)

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

在中国餐厅流程的背景下,与sklearn的DP-GMM中的破解表示相关,新数据点以概率{{1}加入现有群集k }和启动概率为|k| / n-1+alpha的新群集。该参数可以解释为Dirichlet过程的浓度参数,它将影响最终的簇数。

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

可以找到温和的Dirichlet流程教程here

答案 1 :(得分:1)

现在,类DPGMM已减少。 如警告显示: 弃用警告:DPGMM类已弃用; DPGMM类无法正常工作,最好将sklearn.mixture.BayesianGaussianMixture类与参数weight_concentration_prior_type='dirichlet_process'一起使用。 DPGMM在0.18中已弃用,在0.20中将被删除。