Python 使用替代的距离度量,如Mahalanobis和DBSCAN

Python 使用替代的距离度量,如Mahalanobis和DBSCAN,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,我想将Mahalanobis距离与DBSCAN结合使用 对于nearestneighbories您可以传递metric='mahalanobis'和metric_params={'V':np.cov(X)}以使用mahalanobis距离 DBSCAN(eps=0.15, min_samples=8, metric='...', algorithm='brute', leaf_size=30, n_jobs=-1) 但是如何使用DBSCAN?您似乎需要通过创建度量,例如距离度量 例如,您可以使

我想将
Mahalanobis
距离与
DBSCAN
结合使用

对于
nearestneighbories
您可以传递
metric='mahalanobis'
metric_params={'V':np.cov(X)}
以使用
mahalanobis
距离

DBSCAN(eps=0.15, min_samples=8, metric='...', algorithm='brute', leaf_size=30, n_jobs=-1)

但是如何使用
DBSCAN

您似乎需要通过创建度量,例如
距离度量

例如,您可以使用:

import numpy as np
from sklearn.datasets import make_classification
from sklearn.neighbors import DistanceMetric
from sklearn.cluster import DBSCAN

X, y = make_classification()
metric = DistanceMetric.get_metric('mahalanobis', V=np.cov(X))

sklearn.cluster.DBSCAN(eps=0.15, min_samples=8, metric=metric, 
                       algorithm='brute', leaf_size=30, n_jobs=-1)

上述答案在2021年初对我来说并不适用。今天,您不会传递距离对象,而是传递带有马氏协方差参数的字典

上面的示例如下所示:

import numpy as np
from sklearn.datasets import make_classification
from sklearn.cluster import DBSCAN

X, y = make_classification()

sklearn.cluster.DBSCAN(eps=0.15, min_samples=8, metric='mahalanobis', metric_params={'V':np.cov(X)}, algorithm='brute', leaf_size=30, n_jobs=-1)