如何在没有培训的情况下获得k-means的分数?

时间:2014-05-13 11:06:43

标签: scikit-learn

我在脚本中运行MiniBatchKMeans并输出我得到的集群中心。现在在另一个脚本中,我想用这些集群中心计算测试集的分数。我试过这样做:

mbk = MiniBatchKMeans(n_clusters=k, init=cluster_centers)
print mbk.score(X)

但是我得到了这个例外

AttributeError: Model has not been trained yet.

如何在不训练模型的情况下获得k-means的分数?

1 个答案:

答案 0 :(得分:2)

您必须恢复群集器的cluster_centers_属性。执行此操作的标准方法是pickle your model,将其保存到磁盘(而不是仅打印质心),然后加载它以对测试数据进行评分。

在培训脚本中:

mbk = MiniBatchKMeans(n_clusters=k, ...)
mbk.fit(X)
import pickle
pickle.dump(mbk, open('/path/to/mbk.pickle', 'wb'))

在测试脚本中:

import pickle
mbk = pickle.load(open('/path/to/mbk.pickle', 'rb'))
print mbk.score(X)

或者,它可能就足以使用您当前的代码,并在测试脚本中执行:

mbk = MiniBatchKMeans(n_clusters=k)
mbk.cluster_centers_ = cluster_centers
mbk.score(X)

但可能无法保证始终有效。