我正在尝试在Weka中实现余弦距离,但它并不是那么顺利。似乎我必须实施很多才能获得一点点。我尝试了遵循欧几里德距离实现,但它没有直接实现接口,而是扩展了NormalizableDistance。
除此之外,我尝试使用K-means ++和我的“cosine to be”实现,但它崩溃抛出索引超出范围异常。
如何实现余弦距离仅从代码中使用它,我不需要所有与GUI相关的功能?
答案 0 :(得分:1)
请注意,Weka中的许多算法都非常依赖于它们的距离函数,因此如果您只是更改算法中的距离函数,则可能会导致不一致。例如,在k-means中,如果将欧几里德改为余弦距离,结果就没有意义。因为k-means被设计成最小化基于欧几里德距离的目标函数。当k均值计算笛卡尔空间中的平均值时,它试图最小化欧几里德距离的总和。使用余弦距离的正确方法是改变算法的一些主要步骤。在k-means的情况下,我们有使用余弦的球形k-均值。这就是为什么Weka不能用于在任何算法中注入任何距离接口实现的原因。