13

おそらくこれは初歩的なことですが、 で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)

ここここでドキュメントをチェックアウトしました。しかし、期待している引数の種類がわかりません。
私が見ることができるマハラノビス距離を使用する例はありますか?

4

2 に答える 2

23

MahalanobisDistanceVは、共分散行列であるパラメーターと、必要に応じVIて共分散行列の逆である別のパラメーターを期待しています。さらに、これらのパラメーターは両方とも名前が付けられており、位置指定ではありません。

また、 sklearn repoMahalanobisDistanceのファイル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]: <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]])) 
于 2016-01-07T08:23:50.437 に答える