Вхождение в проблему с использованием расстояния махаланобиса в sklearn DistanceMetrics из библиотеки PyOD - PullRequest
0 голосов
/ 17 апреля 2019

Используя алгоритм PyOD KNN , я пытаюсь использовать метрику расстояния Махаланобиса, предоставляя ковариационную матрицу в качестве аргумента metric_params, как указано в документации.Я не уверен, где проблема, но ковариационная матрица не определяется должным образом методом fit.Любая помощь будет высоко ценится.

Я уже смотрел на Как использовать расстояние Махаланобис в sklearn DistanceMetrics?

Вот некоторые детали.

Я сгенерировал некоторые смоделированные данные, используя функцию полезности PyOD, а затем преобразовал их в pandas DataFrame:

from pyod.utils.data import generate_data

outlier_fraction = 0.1

# generate random data with two features with 10% outliers
X_train, y_train = generate_data(n_train=200,train_only=True, n_features=2, contamination=outlier_fraction)

X_train_df = pd.DataFrame(X_train, columns = ['F1', 'F2'])
X_train_df.head()

Затем я могу легко получить ковариационную матрицу следующим образом:

X_train_cov_df = X_train_df.cov()
X_train_cov_df

Соответствующий массив NumPy: X_train_df.cov().values.

Затем я создаю экземпляр KNN и вызываю метод fit следующим образом:

from pyod.models.knn import KNN

outlier_fraction = 0.1
clf = KNN(contamination = outlier_fraction, algorithm='auto', metric='mahalanobis', metric_params = {'V' : X_train_df.cov().values})

# fit the dataset to the model
clf.fit(X_train_df)

Я ожидаю, что созданный выше фрагмент кода будет созданподогнанная модель.Тем не менее получена ошибка:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-116-e4a09fa074e5> in <module>
      5 
      6 # fit the dataset to the model
----> 7 clf.fit(X_train_df)

~/.virtualenvs/work/lib/python3.6/site-packages/pyod/models/knn.py in fit(self, X, y)
    171         self._set_n_classes(y)
    172 
--> 173         self.tree_ = KDTree(X, leaf_size=self.leaf_size, metric=self.metric)
    174         self.neigh_.fit(X)
    175 

sklearn/neighbors/binary_tree.pxi in sklearn.neighbors.kd_tree.BinaryTree.__init__()

sklearn/neighbors/dist_metrics.pyx in sklearn.neighbors.dist_metrics.DistanceMetric.get_metric()

sklearn/neighbors/dist_metrics.pyx in sklearn.neighbors.dist_metrics.MahalanobisDistance.__init__()

ValueError: Must provide either V or VI for Mahalanobis distance
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...