我对"Dirichlet过程作为聚类数量先验分布的无限混合模型"的理解是,聚类的数量是由数据收敛到一定数量的聚类决定的。
这个R Implementation
https://github.com/jacobian1980/ecostates以这种方式决定集群的数量。虽然,R implementation
使用吉布斯采样器,我不确定这是否会影响这一点。
让我困惑的是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)
@maxymoo在评论中提到,n_components
是一个截断参数。
在与sklearn的DP-GMM中的棍子断裂表示相关的中国餐馆过程中,一个新的数据点以|k| / n-1+alpha
的概率加入一个现有的集群k
,而以alpha / n-1 + alpha
的概率开始一个新的集群。该参数可以解释为狄利克雷过程的浓度参数,它将影响最终的簇数。
与使用Gibbs抽样的R实现不同,sklearn的DP-GMM实现使用变分推理。这可能与结果的差异有关。
一个温和的狄利克雷过程教程可以在这里找到。
现在类DPGMM已被删除。正如警告所示:DeprecationWarning:类DPGMM已被弃用;DPGMM
类不能正常工作,最好使用带有参数weight_concentration_prior_type='dirichlet_process'
的sklearn.mixture.BayesianGaussianMixture
类。DPGMM在0.18中已弃用,并将在0.20中删除。