Полагаю, вам следует инициализировать DBSCAN с помощью "предварительно вычисленной" метрики:
dbscan = sklearn.cluster.DBSCAN(metric="precomputed")
(другие параметры опущены). Затем рассчитайте метрики между всеми выборками и получите матрицу формы [n_samples, n_samples]
.
X = user_defined_metric(data, data)
затем используйте эти данные для соответствия DBSCAN:
labels = dbscan.fit_predict(X)
Согласно документации sklearn,
fit_predict(X, y=None, sample_weight=None)
Performs clustering on X and returns cluster labels.
Parameters:
X : array or sparse (CSR) matrix of shape (n_samples, n_features), or array of shape (n_samples, n_samples)
A feature array, or array of distances between samples if metric='precomputed'.
Второй случай - массив формы [n_samples, n_samples]
ваш.