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

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如何使用jaxb整理集合?   java改装添加带有令牌和id的标头   Java Webstart在启动应用程序之前停止   mysql将请求主体作为JSON存储到Java数据库中   春天3。从Java 7更新到Java 8后x应用程序不工作   java如何为我的mock实例化unirest HttpResponse<JsonNode>?   java两个servlet在同一场战争中与两场独立战争中的利弊?   java Mockito验证未失败   GWT中的java文件读取器   java避免代码重复   java谁将设置saml cookie,其中包含凭证信息   java如何修改jar包代码,然后重新导出更新的jar包?   BST数据结构中的java递归差异   java如何从文本文件中读取存储的哈希表?   带有quercus的java php comet   java从SeleniumWebDriver写入json变量   javascript如何在同一个action类中对方法调用action?