我对“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)
答案 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中将被删除。