dpcluster是一个用于组合(集群)向量的包。它根据底层的dirichlet进程混合模型自动选择最适合数据的集群数量。
dpcluster的Python项目详细描述
说明
dpcluster是一个用于组合(集群)向量的包。它自动选择最适合数据的集群数量。具体来说,它将数据建模为指数族中的dirichlet过程混合物。有关教程,请参见“Dirichlet Process” by Y.W. Teh (2010)。目前唯一实现的分布是具有正态逆wishart共轭先验的多元高斯分布,但可以扩展到其他分布。
实现了两种推理算法:
- 如“Variational Inference for Dirichlet Process Mixtures” by Blei et al. (2006)所述的变分推理。这是一个需要将所有数据存储在内存中的批处理算法。
- 一种实验性的在线推理算法,只需要o(log(n))内存,其中n是观察的总数。
要在本地安装,请运行:
python setup.py install --user
用法
下面是一个简单的示例,演示如何对平面中的多个随机点进行聚类:
>>> from dpcluster import * >>> n = 10 >>> data = np.random.normal(size=2*n).reshape(-1,2) >>> vdp = VDP(GaussianNIW(2)) >>> vdp.batch_learn(vdp.distr.sufficient_stats(data)) >>> plt.scatter(data[:,0],data[:,1]) >>> vdp.plot_clusters(slc=np.array([0,1])) >>> plt.show()
根据随机生成的数据,运行此命令可能会生成2-3个集群。当我们将数据点的数目从n = 10增加到n = 500时,dirichlet进程混合模型的自适应性质就变得明显了。在这种情况下,聚类算法可能只使用一个聚类来解释数据。
待办事项
- 实现更多的聚类算法,例如基于gibbs抽样、期望传播、随机梯度下降。
- 实现更多的集群分布。
- 重新实现算法以利用多核或gpu计算。