我有一个巨大的距离矩阵,大小约为590000 * 590000(每个元素的数据类型为float16)。它是否适合用于群集算法的内存?如果不能,那么谁也不会想到在集群DBSCAN算法中使用它?
答案 0 :(得分:1)
590000 * 590000 * 2个字节(float16大小) = 696.2 GB的RAM
它不适合标准计算机的内存。此外,float16会转换为float32以便执行计算(请参见Python numpy float16 datatype operations, and float8?),因此它可能会使用大量700GB以上的RAM。
为什么有平方矩阵?您不能使用condensed matrix吗?它将使用正方形矩阵所需的一半内存。
答案 1 :(得分:0)
聚簇(创建块)以减小DBSCAN的问题大小,例如通过使区域具有重叠区域来完成。
重叠区域的大小必须适合您的问题。
找到问题块和重叠区域的合理大小。
然后通过迭代和比较重叠区域中发现的簇来手动缝合结果。
您必须检查一个簇中的元素是否也存在于其他块中。
您可能必须应用一些拼接参数,例如如果一定数量的元素位于两个不同块中的群集中,则它们是同一群集。
我刚刚看到了this:
问题显然是由于非标准DBSCAN实现 scikit学习。 DBSCAN不需要距离矩阵。
但这可能是fixed年前。
您正在使用哪种实现?
答案 2 :(得分:0)
DBSCAN只需要每个点的邻居。
因此,如果您知道合适的参数(我对此表示怀疑),则可以一次读取一行巨大的矩阵,并在距离阈值内构建邻居列表。假设只有不到1%的邻居(在如此巨大的数据上,您可能会想降低到更低),这将使内存需求减少100倍。
但是通常您要完全避免计算这样的矩阵!