为啥 SKLearn 距离度量类没有余弦距离?

Posted

技术标签:

【中文标题】为啥 SKLearn 距离度量类没有余弦距离?【英文标题】:Why doesnt SKLearn's Distance Metric class have Cosine Distance?为什么 SKLearn 距离度量类没有余弦距离? 【发布时间】:2016-12-05 21:53:55 【问题描述】:

我正在尝试获得具有余弦距离的 KNN,但看起来度量参数不采用余弦距离。 http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.DistanceMetric.html 中仅提供以下指标。这是为什么 ?

用于实值向量空间的指标: 标识符类名 args 距离函数 “欧几里得” 欧几里得距离 sqrt(总和((x - y)^2)) “曼哈顿”曼哈顿距离 总和(|x - y|) “切比雪夫”切比雪夫距离 总和(最大值(|x - y|)) “minkowski” 闵可夫斯基距离 p 总和(|x - y|^p)^(1/p) “wminkowski” WMinkowski 距离 p, w sum(w * |x - y|^p)^(1/p) “seuclidean” SEuclideanDistance V sqrt(sum((x - y)^2 / V)) “mahalanobis” 马氏距离 V 或 VI sqrt((x - y)' V^-1 (x - y)) 用于二维向量空间的指标: 标识符类名距离函数 “haversine” HaversineDistance 2 arcsin(sqrt(sin^2(0.5*dx) cos(x1)cos(x2)sin^2(0.5*dy)))

【问题讨论】:

Using cosine distance with scikit learn KNeighborsClassifier的可能重复 【参考方案1】:

从不满足三角不等式的意义上说,余弦距离不是一个合适的距离。它是一个角度,并不代表任何意义上的最短距离。这在这里描述得很好 - https://en.wikipedia.org/wiki/Cosine_similarity 。对于 K-Means 或任何距离类型的相似性算法,满足距离度量要求 (https://en.wikipedia.org/wiki/Metric_(mathematics)) 是必要的要求。

【讨论】:

以上是关于为啥 SKLearn 距离度量类没有余弦距离?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用用户定义的距离度量来选择 scikits 学习中的 k 个最近邻居?

相似性度量(距离及相似系数)

距离度量以及python实现

将 K 平均聚类距离度量更改为堪培拉距离或 python 上的任何其他距离度量

距离度量以及python实现

数据挖掘中的度量方法