Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据的聚类算法(Python)_Python_Algorithm_Cluster Computing - Fatal编程技术网

数据的聚类算法(Python)

数据的聚类算法(Python),python,algorithm,cluster-computing,Python,Algorithm,Cluster Computing,我有数千个数据条目,看起来类似于以下内容: 08 00 00 00 c3 85 20 65 6e 61 62 6c 65 64 2e 0d 0a 45 78 70 5c 72 88 74 80 83 82 79 68 8d 7b 73 90 7c 60 84 80 74 00 00 5d 77 84 76 7d 85 7f 7d 6c 94 7e 73 82 74 61 7f 7b 76 00 00 63 70 84 8c 95 87 80 72 65 73 70 67 85 8a 64 93

我有数千个数据条目,看起来类似于以下内容:

08 00 00 00 c3 85 20 65 6e 61 62 6c 65 64 2e 0d 0a 45 78 70
5c 72 88 74 80 83 82 79 68 8d 7b 73 90 7c 60 84 80 74 00 00
5d 77 84 76 7d 85 7f 7d 6c 94 7e 73 82 74 61 7f 7b 76 00 00
63 70 84 8c 95 87 80 72 65 73 70 67 85 8a 64 93 89 74 00 00
65 7c 73 6c 6c 9a a2 86 7e 4f 7e 71 7c 79 5c 7f 72 7b 00 00
...
每个条目有20个数字,其中每个数字可以是0到255之间的任何值(显示为十六进制数)。我有一些参考资料可以用来帮助固定集群。这些引用与数据具有相同的模板

我已经确定,我可以使用曼哈顿距离方程,给每个方程一个关于参考数组的数值。但我正在寻找一种方法来对数据进行聚类。根据我对数据的了解,应该有大约50-60个集群。我希望一些数据超出阈值,因此不会与任何集群分离

通过设置数据的方式,我可以在数据进入时处理数据(大约20秒一次)。我还没有找到一个方便的库来使用,整个程序都必须用python编写(最好只使用标准库)


我希望我不需要自己开发算法。我相信我可能想要一个MinHash,但我对其他的可能性持开放态度。

在谷歌上快速搜索就会发现python集群包,位于。其中一个示例显示了我认为与您想要的数据设置有些相似的内容。该软件包确实建议大型数据集在单独的线程中执行集群,尽管我相信在您的特定情况下这是不必要的

>>> from cluster import *
>>> data = [12,34,23,32,46,96,13]
>>> cl = HierarchicalClustering(data, lambda x,y: abs(x-y))
>>> cl.getlevel(10)     # get clusters of items closer than 10
[96, 46, [12, 13, 23, 34, 32]]
>>> cl.getlevel(5)      # get clusters of items closer than 5
[96, 46, [12, 13], 23, [34, 32]]
因为您知道所有数据都在0到255之间,所以
getlevel(5)
调用会将数据分成大约50-52个集群。此外,还必须将数据集转换为整数列表

编辑:结果是,这并不能满足您的需要。我假设您有足够的数据,每五个值中至少有一个值。这种集群算法将所有内容都分组到一个大的嵌套列表中,如下所示

>>> data = [1,2,3,4,5,6,7,8,9]
>>> x = HierarchicalClustering(data, lambda x,y: abs(x-y))
>>> x.getlevel(1)
[[1, 2, 3, 4, 5, 6, 9, 7, 8]]

所以,这实际上取决于您想要什么样的集群。集群是一个非常大且通常在数量上非常昂贵的操作,有很多不同的方法来实现它

我想说的是,没有比使用scikit的集群模块更好的解决方案了。他们对不同的聚类算法进行了精彩的分解,如下所示:


就我个人而言,我对大多数应用程序使用DBSCAN,但这取决于您希望如何对这些数据进行集群,这可能不是您的最佳选择。另外值得一提的是,曼哈顿距离通常不是聚类算法的最佳选择,余弦距离和欧几里德距离都可以更有效地表示数据。

谢谢。我的理解是,分层聚类方法的性能不如MinHash。但是,我确实喜欢这个包,我对scipy的问题是它需要编译。我使用的是arm处理器,我无法访问该工具集来创建新库。因此,首选标准库实现。每一次额外的计算都依赖于我的系统。因此,计算功率和平方根的额外步骤是显而易见的。Scipy和相关库可以在ARM处理器上运行,尽管SSE优化失败了。如果您对您的用例多加一点了解,我可以在此添加一些帮助。它是一个ARM926EJ Sid(wb)rev 4(v5l)(/proc/cpuinfo),我正在运行一个uclibc版本的Linux(内核:2.6.8-rc2-fs3)。我也使用Python2.5。如果您已经安装了UCLIBCLinux,集群模块已经足够老了,您应该可以通过rpm获得预编译的二进制文件。到目前为止,我发现的任何二进制文件都有错误的ABI。回到gcc 3.x,gcc从OABI迁移到了EABI。gcc 3.x之前生成的所有二进制文件都需要重新创建。此外,使用gcc 3.x或更高版本生成的任何新二进制文件都无法在旧的gcc 2.x上工作。我的所有构建都是使用GCC2.x生成的