在Python中聚集约100000个短字符串

在Python中聚集约100000个短字符串,python,numpy,cluster-analysis,levenshtein-distance,Python,Numpy,Cluster Analysis,Levenshtein Distance,我想用q-gram距离或简单的“bag距离”或Python中的Levenshtein距离来聚类~100000个短字符串。我计划填写一个距离矩阵(100000选择2个比较),然后用它进行分层聚类。但我在起步之前就遇到了一些记忆问题。例如,距离矩阵对于numpy太大 aa = numpy.zeros((100000, 100000)) ValueError: array is too big. 这样做似乎合理吗?还是我注定要在这项任务中出现记忆问题?谢谢您的帮助。100000*100000*32b

我想用q-gram距离或简单的“bag距离”或Python中的Levenshtein距离来聚类~100000个短字符串。我计划填写一个距离矩阵(100000选择2个比较),然后用它进行分层聚类。但我在起步之前就遇到了一些记忆问题。例如,距离矩阵对于numpy太大

aa = numpy.zeros((100000, 100000))
ValueError: array is too big.

这样做似乎合理吗?还是我注定要在这项任务中出现记忆问题?谢谢您的帮助。

100000*100000*32bit=40GB,这将是一个很大的RAM,所以是的,您需要找到另一种方法。(即使您可以将这些数据放入内存,计算也会花费太长时间。)


一个常见且简单的快捷方式是对数据的一个随机小子集进行聚类,找到该子集的聚类后,只需将其余的点放入最适合的聚类中。

100亿个元素太多了。我不知道从q-grams,但如果矩阵是稀疏的,你可以使用200000个元素的dict。

你需要矩阵吗?我想你想用矩阵来表示速度

我有一个k-means聚类算法(而不是层次聚类算法),它根据需要计算节点距离。不过,可能只适用于快速距离度量。你的数据比我多,但你受内存限制

  • 机器学习中有一种称为嵌入的方法,原则上,它可以使用O(n+m)内存而不是O(n*m)(n=10^5项,m=10^5个特征)来搜索这个问题的解决方案。不幸的是,我不知道有哪一个可用的源代码是用O(m+n)实现的。见:

    共现数据的欧氏嵌入。 埃米尔·格罗伯森、加尔·切奇克、费尔南多·佩雷拉和纳夫塔利·蒂什比。 机器学习研究杂志,JMLR,8(10月),2007年

  • 可能还有其他解决办法。我认为你应该在机器学习者的论坛上问这个问题,例如,或者更具体的语言处理:


  • 100亿是一个很大的数字。我正在想办法解决这个有趣的问题,但我错过了一些信息。请详细说明您正试图实现的目标,以及原因和可能的假设/限制。这里有两个特别的问题。1) 在分析中是否可以复制字符串?2) 您真的需要所有的2乘2距离吗,或者说对于给定的字符串,只需要较小距离的一部分就足够了?干杯。你的机器不是有4096GB的内存吗?谢谢你的计算。是的,目前的方法似乎不可能。对不起,只是在这里吹毛求疵,两年后:因为距离矩阵是对称的,它将是20GB。是的,类似这样的东西似乎是解决方案。谢谢。我读过关于稀疏矩阵的书。不清楚数据是否稀疏,如你所说……我将不得不做更多的测试。(对我来说)还不清楚pyCluster是否能处理稀疏矩阵。谢谢你的建议。你想如何处理这些数据?我认为这是一个相当重要的问题。原则上,这样的矩阵不会稀疏。创建这样一个稀疏矩阵的一个问题是如何确定是否要计算某个矩阵元素。