在 scikit learn KNeighborsClassifier 中使用余弦距离
Using cosine distance with scikit learn KNeighborsClassifier
是否可以在 scikit learn 的 KNeighborsClassifier 中使用类似于 1 - 余弦相似度的东西?
This answer says no, but on the documentation for KNeighborsClassifier, it says the metrics mentioned in DistanceMetrics 可用。距离度量不包括明确的余弦距离,可能是因为它不是真正的距离,但据说可以将函数输入到度量中。我尝试将 scikit 学习线性内核输入 KNeighborsClassifier,但它给我一个错误,该函数需要两个数组作为参数。还有其他人试过吗?
余弦相似度一般定义为xT y / (||x|| * ||y||),相同则输出1,去如果它们完全不同则为 -1。这个定义在技术上不是一个度量,所以你不能用它来使用加速结构,比如球和 kd 树。如果你强制 scikit 学习使用蛮力方法,你应该能够将它用作距离,如果你将它传递给你自己的自定义距离度量对象。如果你想使用球树,有一些方法可以将余弦相似度转换为有效的距离度量(你可以在JSAT library)
中找到一个
注意,xT y / (||x|| * ||y||) = (x/||x||)T (y/||y||)。欧氏距离可以等效地写为 sqrt(xTx + yTy − 2 xTy)。如果我们在将每个数据点提供给 KNeighborsClassifier 之前对其进行归一化,则所有 x
都为 x^T x = 1
。所以欧几里德距离将退化为 sqrt(2 − 2x^T y)
。对于完全相同的输入,我们会得到 sqrt(2-2*1) = 0
而对于完全相反的输入 sqrt(2-2*-1)= 2
。它显然是一个简单的形状,因此您可以通过对数据进行归一化然后使用欧氏距离来获得与余弦距离相同的顺序。只要您使用 uniform
权重选项,结果将与使用正确的余弦距离相同。
KNN 系列 class 构造函数有一个名为 metric
的参数,您可以在要在最近邻模型中使用的不同距离度量之间切换。
可以找到可用距离度量的列表 here
如果您想使用余弦度量进行排名和class化问题,您可以在归一化特征向量上使用范数 2 欧几里德距离,这会给您相同的 ranking/classification(由 argmax 做出的预测或 argmin 操作)结果。
是否可以在 scikit learn 的 KNeighborsClassifier 中使用类似于 1 - 余弦相似度的东西?
This answer says no, but on the documentation for KNeighborsClassifier, it says the metrics mentioned in DistanceMetrics 可用。距离度量不包括明确的余弦距离,可能是因为它不是真正的距离,但据说可以将函数输入到度量中。我尝试将 scikit 学习线性内核输入 KNeighborsClassifier,但它给我一个错误,该函数需要两个数组作为参数。还有其他人试过吗?
余弦相似度一般定义为xT y / (||x|| * ||y||),相同则输出1,去如果它们完全不同则为 -1。这个定义在技术上不是一个度量,所以你不能用它来使用加速结构,比如球和 kd 树。如果你强制 scikit 学习使用蛮力方法,你应该能够将它用作距离,如果你将它传递给你自己的自定义距离度量对象。如果你想使用球树,有一些方法可以将余弦相似度转换为有效的距离度量(你可以在JSAT library)
中找到一个注意,xT y / (||x|| * ||y||) = (x/||x||)T (y/||y||)。欧氏距离可以等效地写为 sqrt(xTx + yTy − 2 xTy)。如果我们在将每个数据点提供给 KNeighborsClassifier 之前对其进行归一化,则所有 x
都为 x^T x = 1
。所以欧几里德距离将退化为 sqrt(2 − 2x^T y)
。对于完全相同的输入,我们会得到 sqrt(2-2*1) = 0
而对于完全相反的输入 sqrt(2-2*-1)= 2
。它显然是一个简单的形状,因此您可以通过对数据进行归一化然后使用欧氏距离来获得与余弦距离相同的顺序。只要您使用 uniform
权重选项,结果将与使用正确的余弦距离相同。
KNN 系列 class 构造函数有一个名为 metric
的参数,您可以在要在最近邻模型中使用的不同距离度量之间切换。
可以找到可用距离度量的列表 here
如果您想使用余弦度量进行排名和class化问题,您可以在归一化特征向量上使用范数 2 欧几里德距离,这会给您相同的 ranking/classification(由 argmax 做出的预测或 argmin 操作)结果。