如何根据python中最近的以集群为中心的逻辑为现有的Kmeans集群分配一个新的观察值?

2024-04-26 07:08:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用下面的代码使用scikitlearn创建k-means集群。在

kmean = KMeans(n_clusters=nclusters,n_jobs=-1,random_state=2376,max_iter=1000,n_init=1000,algorithm='full',init='k-means++')

kmean_fit = kmean.fit(clus_data)

我还用kmean_fit.cluster_centers_保存了质心

然后我把K表示对象。在

^{pr2}$

这样我就可以加载相同的kmeans pickle对象,并在新数据出现时使用kmean_fit.predict().将其应用到新数据中

问题:

  1. 加载kmeans pickle对象的方法和应用 kmean_fit.predict()请允许我将新观察分配给 基于现有簇的质心的现有簇?这种方法是否只是从零开始对新数据进行重新分类?

  2. 如果此方法不起作用,如何将新观察分配给 现有的集群,因为我已经保存了集群 使用Efficient python代码的centriods?

PS:我知道使用现有的集群作为因变量来构建一个classifier是另一种方法,但是由于时间紧迫,我不想这样做。在


Tags: 数据对象方法代码init集群predictpickle
1条回答
网友
1楼 · 发布于 2024-04-26 07:08:00

是的。无论sklearn.cluster.KMeans对象是否被pickle(如果您正确地取消了pickle,您将处理“相同”的原始对象)都不影响您可以使用predict方法对新观察进行聚类。在

例如:

from sklearn.cluster import KMeans
from sklearn.externals import joblib

model = KMeans(n_clusters = 2, random_state = 100)
X = [[0,0,1,0], [1,0,0,1], [0,0,0,1],[1,1,1,0],[0,0,0,0]]
model.fit(X)

输出:

^{pr2}$

继续:

joblib.dump(model, 'model.pkl')  
model_loaded = joblib.load('model.pkl')

model_loaded

输出:

^{pr2}$

看看n_clusters和{}参数在model和{}对象之间是如何相同的?你可以走了。在

用“新”模型预测:

model_loaded.predict([0,0,0,0])

Out[64]: array([0])

相关问题 更多 >