sklearn 实际上确实使用 DBSCAN 显示了这个示例,就像 Luke 曾经在这里回答一样。
这是基于该示例,使用!pip install python-Levenshtein。
但如果您预先计算了所有距离,您可以更改自定义指标,如下所示。
from Levenshtein import distance
import numpy as np
from sklearn.cluster import dbscan
data = ["DFKLKSLFD", "DLFKFKDLD", "LDPELDKSL"]
def z:
i, j = int(x[0]), int(y[0]) # extract indices
return distance(data[i], data[j])
X = np.arange(len(data)).reshape(-1, 1)
dbscan(X, metric=lev_metric, eps=5, min_samples=2)
如果您预先计算,您可以按照以下方式定义pre_lev_metric(x, y)
def pre_lev_metric(x, y):
i, j = int(x[0]), int(y[0]) # extract indices
return DISTANCES[i,j]
基于K-Medoids 使用sklearn_extra.cluster.KMedoids 的替代答案。 K-Medoids 还没有那么出名,但也只需要距离。
我必须这样安装
!pip uninstall -y enum34
!pip install scikit-learn-extra
比我能够创建集群;
from sklearn_extra.cluster import KMedoids
import numpy as np
from Levenshtein import distance
data = ["DFKLKSLFD", "DLFKFKDLD", "LDPELDKSL"]
def lev_metric(x, y):
i, j = int(x[0]), int(y[0]) # extract indices
return distance(data[i], data[j])
X = np.arange(len(data)).reshape(-1, 1)
kmedoids = KMedoids(n_clusters=2, random_state=0, metric=lev_metric).fit(X)
标签/中心在
kmedoids.labels_
kmedoids.cluster_centers_