【问题标题】:How can I get the score of k-means without training?如何在没有训练的情况下获得 k-means 的分数?
【发布时间】:2014-05-13 19:26:55
【问题描述】:

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

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

但我遇到了这个异常

AttributeError: Model has not been trained yet.

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

【问题讨论】:

    标签: scikit-learn


    【解决方案1】:

    您必须恢复集群器的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)
    

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

    【讨论】:

      猜你喜欢
      • 2020-02-19
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      • 2015-04-07
      • 2019-04-11
      • 2013-02-08
      • 1970-01-01
      • 2020-06-20
      相关资源
      最近更新 更多