当前位置:  开发笔记 > 编程语言 > 正文

如何在sklearn DistanceMetrics中使用马哈拉诺比斯距离?

如何解决《如何在sklearnDistanceMetrics中使用马哈拉诺比斯距离?》经验,为你挑选了1个好方法。

也许这是基本的,但我找不到使用mahalanobis距离的好例子sklearn.

我甚至无法获得这样的指标:

from sklearn.neighbors import DistanceMetric
DistanceMetric.get_metric('mahalanobis')

这会引发错误: TypeError: 0-dimensional array given. Array must be at least two-dimensional.

但是,我甚至无法得到一个数组:

DistanceMetric.get_metric('mahalanobis', [[0.5],[0.7]])

抛出:

TypeError: get_metric() takes exactly 1 positional argument (2 given)

我在这里和这里检查了文档.但是,我没有看到它期待什么类型的论点.
有没有我可以看到使用马哈拉诺比斯距离的例子?



1> tttthomassss..:

MahalanobisDistance期望一个参数V是协方差矩阵,并且可选地是另一个参数VI,它是协方差矩阵的逆.此外,这两个参数都是命名的而不是位置的.

还要检查sklearn repo中MahalanobisDistance文件scikit-learn/sklearn/neighbors/dist_metrics.pyx中的类的docstring .

例:

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]: 

编辑:

由于某些原因(bug?),您无法将距离对象传递给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]])) 

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有