Affinity Propagation 聚类的可扩展和并行编程实现
项目描述
概述
Affinity Propagation 集群的可扩展和并发编程实现。
Affinity Propagation 是一种基于在数据点之间传递消息的聚类算法。
存储和更新样本之间的“亲和力”、“责任”和“相似性”矩阵可能会占用大量内存。我们通过使用 HDF5 数据结构来解决这个问题,允许对任意大型数据集进行 Affinity Propagation 聚类,而其他 Python 实现将在大多数机器上返回 MemoryError。
我们还通过将计算拆分为子进程来显着加快计算速度,从而充分利用多核处理器的资源并绕过标准 Python 解释器 CPython 的全局解释器锁。
安装和要求
Concurrent_AP 需要 Python 2.7 以及以下包和标准 Python 库中的一些模块:
NumPy >= 1.9
psutil
PyTables
scikit-学习
安装工具
建议您检查是否安装了所需的依赖项,尽管下面的pip命令应该会自动为您执行此操作。您确实可以最方便地从官方 Python 包索引 (PyPI) 下载 Concurrent_AP,如下所示:
打开终端窗口;
输入命令pip install Concurrent_AP。
此处的代码已经在 Fedora、OS X 和 Ubuntu 上进行了测试,并且应该可以在类 Unix 操作系统系列的任何其他成员上正常工作。
用法和命令行选项
请参阅与 Concurrent_AP 模块的每个函数关联的文档字符串以获取更多信息以及了解不同任务是如何在子流程之间组织和共享的。
用法:Concurrent_AP [options] file_name,其中file_name 表示要由 Affinity Propagation 聚类处理的数据所在的路径。数据必须由制表符分隔的样本行组成,每一列对应于一个特定的特征。
-c或--convergence:指定迭代次数,而不改变表示收敛的簇数(默认为 15);
-d或--damping:Affinity Propagation 的阻尼参数(默认为 0.5);
-f或--file:用于指定分层数据格式的文件名或文件句柄的选项,其中将存储 Affinity Propagation 聚类中涉及的矩阵(默认为临时文件);
-i或--iterations:消息传递迭代的最大次数(默认为 200);
-m或--multiprocessing:要使用的进程数;
-p或--preference:Affinity Propagation 的偏好参数(如果未指定,将确定为样本之间成对 L2 欧几里得距离分布的中位数);
-s或--similarities:确定相似度矩阵是否已预先计算并存储在通过命令行选项-f或 --file指定的位置可访问的 HDF5 数据结构中(见上文);
-v或--verbose:是否详细。
Concurrent_AP 演示
以下几行说明了在 UCI 机器学习存储库的“虹膜数据集”上使用 Concurrent_AP。虽然这里的样本数量太少,无法充分发挥当前多任务实现和使用 HDF5 数据结构的好处,但该数据集具有众所周知且易于与 scikit-learn 的 Affinity Propagation 聚类版本的快速比较。
在 Python 解释器控制台中,输入以下几行,其目的是创建一个包含 Iris 数据集的文件,该文件稍后将通过 Concurrent_AP 进行 Affinity Propagation 聚类:
>>> import numpy as np
>>> from sklearn import datasets
>>> iris = datasets.load_iris()
>>> data = iris.data
>>> with open('./iris_data.txt', 'w') as f:
np.savetxt(f, data, fmt = '%.4f', delimiter = '\t')
打开一个终端窗口。
输入Concurrent_AP --preference 5.47 --v iris_data.txt或简单地Concurrent_AP iris_data.txt。
后者将自动从数据集中计算偏好参数。
当数据点之间的多轮消息传递完成后,将在当前工作目录中创建一个文件夹,其中包含一个以制表符分隔格式的集群标签文件和集群中心索引文件。
参考
Brendan J. Frey 和 Delbert Dueck。“通过在数据点之间传递消息进行聚类”,Science 2007 年 2 月