基于余弦相似性的单链连通度聚类

silicon-clustering的Python项目详细描述


一种快速计算元素连通度分量(簇)的算法 论它们的特征余弦相似性。如果 它们的余弦相似性高于给定的阈值。接受任何一个核 二维数组或scipy列稀疏(csr)矩阵。

PyPI安装 使用pip install silicon-clustering

Tomáš Gavenčiak ^{tt2}$

用法示例

import silicon, numpy
# 1000 rows, 10 features
data = numpy.random.rand(1000, 10)
# The ensemble normalizes rows of the data by default
# Choose high verbosity (via logging), cosine similarity >=0.97
ens = silicon.CosineClustering(data, sim_threshold=0.97, verbosity=2)
ens.run()
# (... progress reports)
ens.clusters[0]
# <Cluster no 0, size 13>
ens.clusters_by_size()[0]
# <Cluster no 36, size 22>
# With pyplot you can see the projected points
import matplotlib.pyplot as plt
ens.plot(); plt.show()
# or the individual clusters
ens.clusters_by_size()[0].plot(ens); plt.show()

详细信息

与传统算法相比,该算法使用了几种技巧来加快计算速度 通过矩阵乘法的所有成对标量积:

  • 数据按特征投影到cell_dims主成分(pca)中。这个 投影将数据划分为大小为self.distance的单元格,因此只有 相邻的细胞有机会足够相似。那么 相邻的单元格相乘。
  • 这仍然意味着有些细胞太大,不能进行矩阵乘法,所以一秒钟 在细胞增殖前使用技巧:蚕食 数据集。对于随机中心行,计算与所有其他行的相似性,并 所有类似的点聚集在一起(可能合并现有的集群)。这个有 预聚类数据集中最密集点的效果(特别是重复值) -密集的星团有很好的机会被一个中心击中,消除了大部分 簇的质量(以及相应的细胞)。啃咬次数 迭代应该根据数据进行调整(以合理地减小单元大小)。
  • 为了结合这两个技巧,一部分聚集点(例如10%)与 所有未聚类的点都被考虑用于相邻细胞的增殖。百分之十 返回的点应确保被分块的簇与 被蚕食击中,但接近并实际上属于星团。

由于不是所有的分块行都用在相邻的单元格标量积中,所以算法 可能会错过一些在啃食球边界上的单个簇连接,但我们发现了 实际上不太可能。

该算法在不到一秒钟的时间内将10000个高斯点在30个维度上进行聚类。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java Double。将长位加倍到C#位转换器。ToDouble   java如何使用正则表达式从固定的Y位数中提取最后的X位数?   java如何显示ChatMessage类列表中的字符串消息属性?   java从JSON或XML提要导入数据,并在Android中创建列表   在整数之间使用按位AND运算符的java好处?   java从Android中的Bean类获取空值?   java会话id对另一台服务器意味着什么?   java未选择案例时开关的工作方式   java组织。openqa。硒。SessionNotCreatedException:无法创建新的远程会话。在emulator中初始化安卓驱动程序时   JavaSWT父和子对话框通信   java请确保java_HOME指向JDK而不是JRE   java用户即使在成功登录后也是匿名的   java控制器单元测试无法自动连接所需的bean   Java小程序类文件