为啥 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 个最近邻居?