Мне нужно вычислить метки из центров кластеризации, сгенерированных другим кластеризатором в другом наборе данных без исходного объекта кластеризатора .
Я знаю, что могу жестко закодировать его в python вроде так
def compute_labels(centers,datapoints):
ans=[]
for point in datapoints:
ans.append(
min(
((i,np.linalg.norm(point-center)) for i,center in enumerate(centers)),
key=lambda t:t[1]
)[0]
)
return ans
однако для моего приложения это было бы медленно, мне нужна его реализация на более низком уровне, поэтому мне было интересно, можно ли было бы просто использовать scikit-learn или numpy.
что я пробовал:
from sklearn.cluster import KMeans
import numpy as np
np.random.seed(42)
datapoints1=np.random.rand(200,38)
datapoints2=np.random.rand(200,38)
kmeans1=KMeans(
init="k-means++",
random_state=42,
n_init=100
)
kmeans1=kmeans1.fit(datapoints1)
kmeans2=KMeans(
init=kmeans1.cluster_centers_,
max_iter=1,
n_init=1
)
kmeans2.predict(datapoints2)
print((kmeans1.cluster_centers_==kmeans2.cluster_centers_).all())
но это вызывает sklearn.exceptions.NotFittedError
исключение в kmeans2.predict(datapoints2)
, я пытался установить max_iter=0
в kmeans kwargs, но это также вызывает исключение.