【问题标题】:Sci-kit learn pairwise_distances is imprecise?Scikit 学习 pairwise_distances 不精确?
【发布时间】:2014-12-27 15:54:02
【问题描述】:

scikit-learn 函数 pairwise_distances 提供数组 X 的距离矩阵。 然而,对于某些输入,结果似乎并不精确。

例子:

from sklearn.metrics.pairwise import pairwise_distances
X = [[-0.903858372568, -0.5521578], [-0.903858372568, -0.55215782]]
print pairwise_distances(X)

给出以下输出:

[[ 0.  0.]
[ 0.  0.]]

虽然有0.00000002的距离。

第二个例子:

X = [[-0.903858372568, -0.5521578], [-0.903858372568, -0.552157821]]

给予

[[  0.00000000e+00   2.10734243e-08]
[  2.10734243e-08   0.00000000e+00]]

这里有一段距离,但只正确到第一位。

对于我的应用程序,如果输出可以为零,尽管有一段距离,这是不可取的。 有没有提高精度的好方法?

【问题讨论】:

  • sklearn 中的成对距离函数针对速度进行了优化。他们将欧几里得距离分解为两个范数和一个矩阵乘积,结果由于数值误差而不稳定。
  • 如果您的应用程序依赖于2e-7 的差异,您应该认真考虑重新调整您的方程式/数据...
  • 另见here
  • here

标签: scikit-learn precision


【解决方案1】:

我没有深入研究为什么 scikit-learn 给出如此不精确的结果,但似乎 scipy 给出了更好的精确度。试试这个:

from scipy.spatial.distance import pdist, squareform
squareform(pdist(X))

例如,

X = [[-0.903858372568, -0.5521578], [-0.903858372568, -0.552157821]]

给予

array([[  0.00000000e+00,   2.10000000e-08],
       [  2.10000000e-08,   0.00000000e+00]])

【讨论】:

    猜你喜欢
    • 2018-05-28
    • 2017-09-27
    • 2016-05-18
    • 2017-11-14
    • 2018-10-21
    • 2016-12-20
    • 2015-12-22
    • 2016-07-16
    • 1970-01-01
    相关资源
    最近更新 更多