作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
也许这是基本的,但我找不到在 sklearn
中使用 mahalanobis
距离的好例子。
我什至无法获得这样的指标:
from sklearn.neighbors import DistanceMetric
DistanceMetric.get_metric('mahalanobis')
这会抛出一个错误:TypeError: 0-dimensional array given.数组必须至少是二维的
。
但是,我什至无法让它接受数组:
DistanceMetric.get_metric('mahalanobis', [[0.5],[0.7]])
抛出:
TypeError: get_metric() takes exactly 1 positional argument (2 given)
最佳答案
MahalanobisDistance
需要一个参数 V
,它是协方差矩阵,以及可选的另一个参数 VI
,它是协方差矩阵的逆矩阵。此外,这两个参数都是命名而不是位置。
同时检查文件 scikit-learn/sklearn/neighbors/dist_metrics.pyx
中类 MahalanobisDistance
的文档字符串 sklearn repo .
示例:
In [18]: import numpy as np
In [19]: from sklearn.datasets import make_classification
In [20]: from sklearn.neighbors import DistanceMetric
In [21]: X, y = make_classification()
In [22]: DistanceMetric.get_metric('mahalanobis', V=np.cov(X))
Out[22]: <sklearn.neighbors.dist_metrics.MahalanobisDistance at 0x107aefa58>
编辑:
由于某些原因(错误?),您无法将距离对象传递给 NearestNeighbor
构造函数,但需要使用距离度量的名称。此外,设置 algorithm='auto'
(默认为 'ball_tree'
)似乎不起作用;所以从上面的代码中给出 X
你可以这样做:
In [23]: nn = NearestNeighbors(algorithm='brute',
metric='mahalanobis',
metric_params={'V': np.cov(X)})
# returns the 5 nearest neighbors of that sample
In [24]: nn.fit(X).kneighbors(X[0, :])
Out[24]: (array([[ 0., 3.21120892, 3.81840748, 4.18195987, 4.21977517]]),
array([[ 0, 36, 46, 5, 17]]))
关于python - 如何在sklearn DistanceMetrics中使用马氏距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34643548/
我是一名优秀的程序员,十分优秀!