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

O.r*_*rka 6 python statistics machine-learning bayesian scikit-learn

我对"Dirichlet过程作为聚类数量的先验分布的无限混合模型"的理解是,当聚合到一定数量的聚类时,聚类的数量由数据决定.

这个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 ProcessScikit-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)
Run Code Online (Sandbox Code Playgroud)

raf*_*lle 5

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

在中国餐厅过程,这是在sklearn的DP-GMM相关棒破代表性的背景下,一个新的数据点加入现有集群k的概率|k| / n-1+alpha,并开始用概率的新集群alpha / n-1 + alpha.该参数可以解释为Dirichlet过程的浓度参数,它将影响最终的簇数.

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

这里可以找到温和的Dirichlet Process教程.