Python sklearn:最近邻中的自定义距离函数给出错误答案

Python sklearn:最近邻中的自定义距离函数给出错误答案,python,numpy,scikit-learn,Python,Numpy,Scikit Learn,我试图使用Sklearn的自定义模型函数,但它给出了错误的距离。我有两个向量,我只需计算它们的余弦相似性,然后做1-余弦相似性,作为距离度量 代码如下: from sklearn.metrics.pairwise import cosine_similarity def dist_fun(x, y): return 1 - cosine_similarity(x.reshape(-1, 1), y.reshape(-1, 1)) nbrs = NearestNeighbors(n_nei

我试图使用Sklearn的自定义模型函数,但它给出了错误的距离。我有两个向量,我只需计算它们的余弦相似性,然后做
1-余弦相似性
,作为距离度量

代码如下:

from sklearn.metrics.pairwise import cosine_similarity
def dist_fun(x, y):
    return 1 - cosine_similarity(x.reshape(-1, 1), y.reshape(-1, 1))
nbrs = NearestNeighbors(n_neighbors=499, algorithm='brute',metric = dist_fun)
nbrs.fit(x)
distances, indices = nbrs.kneighbors(x[10])
print (distances)
我得到以下输出。如果注意到距离的值是单调递增的。即使我在预测最近邻时增加样本数,我仍然得到相同的单调增长趋势

array([[ -4.44089210e-16,   3.56164824e-03,   8.85347066e-02,
          9.26700271e-02,   9.58609825e-02,   9.64477012e-02,
          9.71035356e-02,   9.73237473e-02,   9.80660138e-02,
          9.80660138e-02,   9.80660138e-02,   9.83731564e-02,
          1.00054271e-01,   1.01234246e-01,   1.01811852e-01,
          1.01849141e-01,   1.02621459e-01,   1.03175060e-01,
          1.03230172e-01,   1.04023403e-01,   1.04023403e-01,
          1.05189391e-01,   1.05705694e-01,   1.05739410e-01,
          1.05773038e-01,   1.06241366e-01,   1.06661965e-01,
          1.07260520e-01,   1.07538839e-01,   1.07634464e-01,
          1.08394912e-01,   1.08400640e-01,   1.09003193e-01,
          1.09209639e-01,   1.10290264e-01,   1.10379197e-01,
          1.10442903e-01,   1.10482662e-01,   1.10698656e-01,
          1.11221501e-01,   1.11401997e-01,   1.11852502e-01,
          1.11852502e-01,   1.11929412e-01,   1.12309441e-01,
          1.12805816e-01,   1.13097788e-01,   1.13097788e-01,
          1.13097788e-01,   1.13097788e-01,   1.13097788e-01,
          1.13543242e-01,   1.13672560e-01,   1.13687307e-01,
          1.14012940e-01,   1.14184583e-01,   1.14184583e-01,
          1.14184583e-01,   1.14322087e-01,   1.15439428e-01,
          1.15884416e-01,   1.16419147e-01,   1.16773279e-01,
          1.16803298e-01,   1.17356220e-01,   1.17495484e-01,
          1.17707062e-01,   1.18146396e-01,   1.18146396e-01,
          1.18595911e-01,   1.18883730e-01,   1.19037034e-01,
          1.19069722e-01,   1.19828872e-01,   1.20566816e-01,
          1.20582402e-01,   1.20582402e-01,   1.20708629e-01,
          1.20716289e-01,   1.20716289e-01,   1.20972743e-01,
          1.21237855e-01,   1.21788334e-01,   1.22017458e-01,
          1.22226468e-01,   1.22230286e-01,   1.22230286e-01,
          1.22702611e-01,   1.23099224e-01,   1.23163757e-01,
          1.23289609e-01,   1.23289609e-01,   1.23292786e-01,
          1.23417226e-01,   1.23664208e-01,   1.23990961e-01,
          1.24189621e-01,   1.24189621e-01,   1.24960174e-01,
          1.25237395e-01,   1.25624878e-01,   1.25831386e-01,
          1.26729099e-01,   1.26729099e-01,   1.26729099e-01,
          1.26729099e-01,   1.26782286e-01,   1.26799527e-01,
          1.26889090e-01,   1.26909872e-01,   1.26970122e-01,
          1.27205129e-01,   1.27268976e-01,   1.27431932e-01,
          1.27431932e-01,   1.27538047e-01,   1.27538047e-01,
          1.27538047e-01,   1.27587842e-01,   1.27817838e-01,
          1.27877807e-01,   1.28231833e-01,   1.28238203e-01,
          1.28633816e-01,   1.28664222e-01,   1.28734225e-01,
          1.29052631e-01,   1.29217549e-01,   1.29217549e-01,
          1.29217549e-01,   1.29484514e-01,   1.29538669e-01,
          1.29538669e-01,   1.30029317e-01,   1.30124414e-01,
          1.30407127e-01,   1.30439623e-01,   1.30439623e-01,
          1.30468360e-01,   1.30514789e-01,   1.30534321e-01,
          1.30550394e-01,   1.30655239e-01,   1.30690953e-01,
          1.30723322e-01,   1.30723322e-01,   1.30841502e-01,
          1.30901270e-01,   1.30905220e-01,   1.31210175e-01,
          1.31613037e-01,   1.32151011e-01,   1.32223286e-01,
          1.32247432e-01,   1.32294174e-01,   1.32423050e-01,
          1.32503399e-01,   1.32821803e-01,   1.32864458e-01,
          1.32905592e-01,   1.32940640e-01,   1.33156698e-01,
          1.33156698e-01,   1.33156698e-01,   1.33181600e-01,
          1.33193259e-01,   1.33238006e-01,   1.34096500e-01,
          1.34121202e-01,   1.34537649e-01,   1.34564039e-01,
          1.34766528e-01,   1.35170312e-01,   1.35298693e-01,
          1.35951024e-01,   1.36009865e-01,   1.36237868e-01,
          1.36377872e-01,   1.36432106e-01,   1.36562942e-01,
          1.36626040e-01,   1.36626040e-01,   1.36626040e-01,
          1.37111532e-01,   1.37146403e-01,   1.37230736e-01,
          1.37315621e-01,   1.37393155e-01,   1.37411484e-01,
          1.37502918e-01,   1.37598004e-01,   1.37631683e-01,
          1.37659006e-01,   1.37828945e-01,   1.38182843e-01,
          1.38248875e-01,   1.38281130e-01,   1.38281130e-01,
          1.38646317e-01,   1.38727186e-01,   1.38825673e-01,
          1.38859042e-01,   1.38929188e-01,   1.39211953e-01,
          1.39248834e-01,   1.39321659e-01,   1.39335374e-01,
          1.39394730e-01,   1.39395047e-01,   1.39521717e-01,
          1.39670180e-01,   1.39868526e-01,   1.40094735e-01,
          1.40340615e-01,   1.40340615e-01,   1.40428139e-01,
          1.40676071e-01,   1.40819932e-01,   1.40957589e-01,
          1.41202945e-01,   1.41323204e-01,   1.41916590e-01,
          1.42025371e-01,   1.42272157e-01,   1.42710332e-01,
          1.42726921e-01,   1.42755484e-01,   1.43157054e-01,
          1.43299232e-01,   1.43299232e-01,   1.43299232e-01,
          1.43325823e-01,   1.43400446e-01,   1.43681951e-01,
          1.43690076e-01,   1.44005065e-01,   1.44238973e-01,
          1.44238973e-01,   1.44396790e-01,   1.44473873e-01,
          1.44473873e-01,   1.44917016e-01,   1.45297745e-01,
          1.45304870e-01,   1.45346460e-01,   1.45394546e-01,
          1.45484785e-01,   1.45554162e-01,   1.45626208e-01,
          1.45740562e-01,   1.45762265e-01,   1.45794017e-01,
          1.45804720e-01,   1.45824593e-01,   1.45861611e-01,
          1.46116666e-01,   1.46212846e-01,   1.46347797e-01,
          1.46355462e-01,   1.46510241e-01,   1.46706380e-01,
          1.46706380e-01,   1.46731347e-01,   1.46880086e-01,
          1.46880086e-01,   1.46880086e-01,   1.46895321e-01,
          1.46895321e-01,   1.46898662e-01,   1.46932590e-01,
          1.46932590e-01,   1.46934786e-01,   1.47062161e-01,
          1.47102765e-01,   1.47125613e-01,   1.47195875e-01,
          1.47203984e-01,   1.47276458e-01,   1.47541098e-01,
          1.47679824e-01,   1.47744772e-01,   1.48021011e-01,
          1.48021011e-01,   1.48051018e-01,   1.48093826e-01,
          1.48120184e-01,   1.48687113e-01,   1.49050753e-01,
          1.49073961e-01,   1.49157940e-01,   1.49225408e-01,
          1.49249918e-01,   1.49394014e-01,   1.49660354e-01,
          1.49674427e-01,   1.49769292e-01,   1.49769292e-01,
          1.49773761e-01,   1.49897212e-01,   1.50259016e-01,
          1.50295923e-01,   1.50629288e-01,   1.50878913e-01,
          1.51013432e-01,   1.51178477e-01,   1.51207396e-01,
          1.51451096e-01,   1.51580748e-01,   1.51695365e-01,
          1.51695365e-01,   1.51734088e-01,   1.52043108e-01,
          1.52060878e-01,   1.52301522e-01,   1.52445639e-01,
          1.52544161e-01,   1.52743333e-01,   1.52872556e-01,
          1.52908042e-01,   1.53073837e-01,   1.53204360e-01,
          1.53246186e-01,   1.53300760e-01,   1.53306524e-01,
          1.53591182e-01,   1.53626938e-01,   1.54052601e-01,
          1.54052601e-01,   1.54052601e-01,   1.54052601e-01,
          1.54052601e-01,   1.54052601e-01,   1.54052601e-01,
          1.54052601e-01,   1.54052601e-01,   1.54052601e-01,
          1.54052601e-01,   1.54052601e-01,   1.54052601e-01,
          1.54052601e-01,   1.54229708e-01,   1.54366075e-01,
          1.54392042e-01,   1.54537078e-01,   1.54546889e-01,
          1.54602933e-01,   1.54738194e-01,   1.54805575e-01,
          1.54977338e-01,   1.54977338e-01,   1.55012155e-01,
          1.55016827e-01,   1.55028359e-01,   1.55383266e-01,
          1.55610723e-01,   1.55615490e-01,   1.55722208e-01,
          1.55737515e-01,   1.55840964e-01,   1.55847880e-01,
          1.55929136e-01,   1.56063487e-01,   1.56063487e-01,
          1.56063487e-01,   1.56063487e-01,   1.56141707e-01,
          1.56141707e-01,   1.56142331e-01,   1.56161761e-01,
          1.56179449e-01,   1.56280680e-01,   1.56409934e-01,
          1.56616691e-01,   1.57009845e-01,   1.57278415e-01,
          1.57292869e-01,   1.57563945e-01,   1.57617324e-01,
          1.57617324e-01,   1.57695826e-01,   1.57776595e-01,
          1.57783399e-01,   1.58031769e-01,   1.58031943e-01,
          1.58085396e-01,   1.58353148e-01,   1.58459880e-01,
          1.59230349e-01,   1.59236225e-01,   1.59242199e-01,
          1.59353165e-01,   1.59391785e-01,   1.59396695e-01,
          1.59654312e-01,   1.59798363e-01,   1.59860123e-01,
          1.59895006e-01,   1.59934228e-01,   1.59950186e-01,
          1.60054827e-01,   1.60526486e-01,   1.60554902e-01,
          1.60787508e-01,   1.60850900e-01,   1.61051430e-01,
          1.61090963e-01,   1.61101839e-01,   1.61143406e-01,
          1.61246539e-01,   1.61393185e-01,   1.61488368e-01,
          1.61496464e-01,   1.61559989e-01,   1.61658115e-01,
          1.61892677e-01,   1.62214331e-01,   1.62329668e-01,
          1.62603532e-01,   1.62727233e-01,   1.62760341e-01,
          1.62869835e-01,   1.62871981e-01,   1.62997728e-01,
          1.63399030e-01,   1.63441577e-01,   1.63834938e-01,
          1.63996438e-01,   1.64021907e-01,   1.64200732e-01,
          1.64268615e-01,   1.64648767e-01,   1.64782431e-01,
          1.64782476e-01,   1.64782476e-01,   1.64813323e-01,
          1.64892981e-01,   1.65070814e-01,   1.65179167e-01,
          1.65386484e-01,   1.65563070e-01,   1.65597298e-01,
          1.65707791e-01,   1.65719309e-01,   1.65762137e-01,
          1.65807323e-01,   1.65832093e-01,   1.65832093e-01,
          1.65862588e-01,   1.66052858e-01,   1.66094593e-01,
          1.66187153e-01,   1.66233951e-01,   1.66233951e-01,
          1.66265777e-01,   1.66415407e-01,   1.66644843e-01,
          1.66756621e-01,   1.66838890e-01,   1.66934285e-01,
          1.66978791e-01,   1.66978791e-01,   1.67427764e-01,
          1.67445394e-01,   1.67445394e-01,   1.67445394e-01,
          1.67650307e-01,   1.68064795e-01,   1.68072024e-01,
          1.68134311e-01,   1.68279546e-01,   1.68518910e-01,
          1.68596446e-01,   1.68665319e-01,   1.68828265e-01,
          1.69141448e-01,   1.69220060e-01,   1.69342483e-01,
          1.69598857e-01,   1.69757684e-01,   1.69965379e-01,
          1.70091805e-01,   1.70114998e-01,   1.70158904e-01,
          1.70284561e-01,   1.70285288e-01,   1.70430046e-01,
          1.70467217e-01,   1.71019575e-01,   1.71045745e-01,
          1.71238149e-01,   1.71417066e-01,   1.71478228e-01,
          1.71552705e-01,   1.71726300e-01,   1.71779031e-01,
          1.71835164e-01,   1.72085845e-01,   1.72085845e-01,
          1.72180127e-01]])

延伸我的评论
nearestneights
(NN)将始终以升序显示距离,结果将是按顺序(从最近到最远)显示的
K
最近邻居

index
变量将包含数据点的所有
K
最近邻的索引。也就是说,距离告诉您的是从每个最近的
K
点到源点的距离,按升序排列。
索引告诉您的是所有数据点中的哪个点对应于
距离
数组的
i
位置

如果要恢复原始值,可以执行以下操作:

y = x[indices]

现在
y
将按顺序列出
K
最近点。

您也可以直接使用余弦距离,这是一个示例。我使用的是一个类似的自定义距离,但不幸的是无法共享。“…距离的值是单调增加的”为什么这是一个问题?你验证过点的返回值是否是,事实上,最近的邻居吗?距离总是单调递增的,因为它给了你最近的邻居。