我需要从没有原始clusterer对象的不同数据集中的另一个clusterer生成的聚类中心计算标签
我知道我可以像这样用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正在检查一个名为
check_is_fitted
的函数,该函数正在查看模型的属性。在您的例子中,由于您从未调用过fit
,因此某些属性不存在,这会触发错误。您可以通过手动创建它们来伪造它,例如:只是对Nicolas M. answer的一个补充
广义函数(带有虚拟静态变量):
相关问题 更多 >
编程相关推荐