我可以在 KNN 算法中使用余弦相似度作为距离度量吗

数据挖掘 分类 推荐系统 余弦距离
2021-10-02 04:09:08

大多数关于 KNN 的讨论都提到了欧几里得距离、曼哈顿距离和汉明距离,但没有提到余弦相似度度量。是否有一个原因?

4个回答

简短的回答:余弦距离并不是总体上表现最好的距离度量


尽管相似性度量通常使用距离度量来表示,但实际上它是一种更灵活的度量,因为它不需要对称或满足三角不等式。尽管如此,在应用最近邻方法时,使用合适的距离度量(如欧几里得距离或曼哈顿距离)是很常见的,因为它们在现实世界数据集上的性能已得到证实。因此,在讨论 KNN 时会经常提到它们。

您可能会发现这篇2017 年的评论内容丰富,它试图回答“在大量距离和相似性度量中,哪些距离度量可用于 KNN 分类器?”这个问题。他们还考虑了余弦距离等内积指标。

简而言之,他们得出的结论是(毫不奇怪)没有最佳距离度量可用于所有类型的数据集,因为结果表明每个数据集都支持特定的距离度量,并且该结果符合无免费午餐定理。很明显,在测试的指标中,余弦距离并不是总体上表现最好的指标,甚至在大多数噪声水平中表现最差(最低精度)。然而,它确实优于 3/28 数据集中的其他测试距离。

那么我可以在 KNN 算法中使用余弦相似度作为距离度量吗? 的,对于某些数据集,例如Iris ,与 Euclidian 相比,它甚至应该产生更好的性能(第 30 页)。

正如 Lejafar 提到的,余弦违反了三角不等式,但也许这个repo 会帮助你

虽然余弦相似度不是一个合适的距离度量,因为它不符合三角不等式,但它在 KNN 中很有用。

但是,请注意当角度相同时余弦相似度最大:cos(0º) = 1, cos(90º) = 0。因此,您可能希望使用正弦或选择余弦相似度最大的邻居作为最接近。

如果确实存在原因,则可能与余弦距离不是适当的距离度量这一事实有关。尽管如此,它仍然是一个有用的小东西。