如何在不使用任何库的情况下将 CSR 矩阵应用于 python 中的 DBSCAN 算法?
更新:矩阵大小(8580、126356)
我试了一下并实现了算法。它运行得相当慢。我猜是因为 regionQuery 函数计算了所选点与数据集中所有其他点之间的欧几里德距离。
有什么办法可以解决这个问题吗?
如何在不使用任何库的情况下将 CSR 矩阵应用于 python 中的 DBSCAN 算法?
更新:矩阵大小(8580、126356)
我试了一下并实现了算法。它运行得相当慢。我猜是因为 regionQuery 函数计算了所选点与数据集中所有其他点之间的欧几里德距离。
有什么办法可以解决这个问题吗?
正如@Anony-Mousse 指出的那样,在 DBSCAN 上,经常使用索引结构来减少执行时间。Kd-trees 就是一个例子,但是这个只在小维度上运行良好。
您对减速有正确的直觉,从所有点到一个点的每个距离的计算都是 O(n) 时间复杂度,但应用于每个点它变成 O(n 2 ),这是我们希望在重要的点集上避免的事情.
此外,您可能会重新考虑您的聚类方法,因为众所周知,DBSCAN 可以很好地处理小维度数据集,因为超球体积会随着维度的增加而快速减少。
继续尝试自己实现算法,这是最好的学习方式,即使现有的成熟库通常做得更好但也更难理解,一步一步你将能够编写更好的算法并为开源库做出贡献。
这也取决于数据的传播。当我有 0-1 之间的数据时,它运行良好。当我尝试对内部的一些数据进行阈值处理时,我有许多值非常小的样本。它开始慢慢工作。