我很好奇是否有可能在scipy聚类的两点之间指定你自己的距离函数。我有3个值的数据点:GPS-lat,GPS-lon和posix-time。我想使用一些算法对这些点进行聚类:凝聚聚类,平均移位或其他。
问题是需要使用Haversine公式计算GPS点之间的距离。然后需要对该距离进行适当加权,以便与聚类目的的距离(秒)相比较。
查看scipy的文档我没有看到任何跳出来作为指定两点之间的自定义距离的方法。
我还有另一种方法吗?我很好奇Pythonic要做的是什么。
答案 0 :(得分:0)
你问sklearn,但我在那里没有给你一个好的答案。基本上,您可以按照自己喜欢的方式构建距离矩阵,许多算法将处理距离矩阵。问题是这需要O(n ^ 2)内存。
对于我对聚类地理数据的尝试,我改为使用ELKI(Java,而不是Python)。首先,它包括大地距离函数;但它还包括该距离函数的许多算法和的索引加速。
我没有使用其他属性,例如时间。正如您已经注意到的那样,您需要对它们进行适当的称重,因为1米不等于1秒。权重将非常依赖于用例和启发式。
为什么我建议ELKI是因为他们有一个很好的Tutorial on implementing custom distance functions,然后可以在大多数算法中使用。它们不能用于每种算法 - 有些根本不使用距离,或者被限制在例如仅限Minkowski指标。但是许多算法可以使用任意(甚至非度量)距离函数。
还有index accelerated distance functions的后续教程。对于我的地理数据,索引非常有用,速度提高了100倍以上,因此可以处理10倍以上的数据。