如何在 Scikit-learn 中使用“狄利克雷过程高斯混合模型”? (n_components?)
How to use `Dirichlet Process Gaussian Mixture Model` in Scikit-learn? (n_components?)
我对"an infinite mixture model with the Dirichlet Process as a prior distribution on the number of clusters"的理解是聚类的数量是由数据决定的,因为它们收敛到一定数量的聚类。
这个R Implementation
https://github.com/jacobian1980/ecostates就是这样决定簇数的。尽管 R implementation
使用 Gibbs 采样器,但我不确定这是否会影响它。
令我困惑的是 n_components
参数。 n_components: int, default 1 :
Number of mixture components.
如果成分个数是由数据和狄利克雷过程决定的,那么这个参数是什么?
最终,我试图获得:
(1) 每个样本的聚类分配;
(2) 每个集群的概率向量;和
(3) 每个样本的 likelihood/log-likelihood。
好像(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 中的 Stick-breaking 表示相关的 Chinese Restaurant Process 的上下文中,新数据点以概率 |k| / n-1+alpha
加入现有集群 k
并且开始一个概率为alpha / n-1 + alpha
的新集群。这个参数可以解释为狄利克雷过程的浓度参数,它会影响最终的簇数。
与使用 Gibbs 采样的 R 实现不同,sklearn 的 DP-GMM 实现使用变分推理。这可能与结果的差异有关。
可以找到温和的狄利克雷过程教程 here。
现在 Class DPGMM 已弃用。
如警告所示:
弃用警告:Class DPGMM 已弃用; DPGMM
class 无法正常工作,最好使用带有参数 weight_concentration_prior_type='dirichlet_process'
的 sklearn.mixture.BayesianGaussianMixture
class。 DPGMM 已在 0.18 中弃用,并将在 0.20 中删除。
我对"an infinite mixture model with the Dirichlet Process as a prior distribution on the number of clusters"的理解是聚类的数量是由数据决定的,因为它们收敛到一定数量的聚类。
这个R Implementation
https://github.com/jacobian1980/ecostates就是这样决定簇数的。尽管 R implementation
使用 Gibbs 采样器,但我不确定这是否会影响它。
令我困惑的是 n_components
参数。 n_components: int, default 1 :
Number of mixture components.
如果成分个数是由数据和狄利克雷过程决定的,那么这个参数是什么?
最终,我试图获得:
(1) 每个样本的聚类分配;
(2) 每个集群的概率向量;和
(3) 每个样本的 likelihood/log-likelihood。
好像(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 中的 Stick-breaking 表示相关的 Chinese Restaurant Process 的上下文中,新数据点以概率 |k| / n-1+alpha
加入现有集群 k
并且开始一个概率为alpha / n-1 + alpha
的新集群。这个参数可以解释为狄利克雷过程的浓度参数,它会影响最终的簇数。
与使用 Gibbs 采样的 R 实现不同,sklearn 的 DP-GMM 实现使用变分推理。这可能与结果的差异有关。
可以找到温和的狄利克雷过程教程 here。
现在 Class DPGMM 已弃用。
如警告所示:
弃用警告:Class DPGMM 已弃用; DPGMM
class 无法正常工作,最好使用带有参数 weight_concentration_prior_type='dirichlet_process'
的 sklearn.mixture.BayesianGaussianMixture
class。 DPGMM 已在 0.18 中弃用,并将在 0.20 中删除。