【问题标题】:using sklearn KMeans with initial centroids without fitting model在没有拟合模型的情况下使用具有初始质心的 sklearn KMeans
【发布时间】:2022-09-30 21:51:20
【问题描述】:

我已经拟合了一个 KMeans 模型并检索了数据的质心。

有什么方法可以使用这些质心来使用 predict() 函数来初始化 KMeans 模型,但是不调用 fit 函数

我尝试运行以下代码并遇到此错误。 这里的 jsonl 文件有一个 json 对象为

{ \"primary\" : [[<some_array>]]}
{ \"secondary\" : [[<some_array>]]}
models = dict()
for json_str in json_list:
    result = json.loads(json_str)
    models[list(result.keys())[0]] = list(result.values())[0]


from sklearn.cluster import KMeans
k = KMeans(init = np.array(models[\'primary\']))
k.predict(inference_data)
NotFittedError: This KMeans instance is not fitted yet. Call \'fit\' with appropriate arguments before using this estimator.

这个问题在 cuml 版本的 KMeans 中得到了很好的处理,但是如何使用 sklearn 来完成它。

    标签: python json scikit-learn jsonlines


    【解决方案1】:

    您可以序列化对象。您可以使用pickle 或joblib。 Sklearn's 首选方式是使用joblib。

    from joblib import dump, load
    
    k = KMeans()
    
    # fit and stuff here
    
    dump(k, 'filename.joblib')
    
    # later on
    
    k = load('filename.joblib') 
    

    至于像您要求的那样在对象上设置值,您可以尝试设置所有attributes that K-means defines after fitting。您必须自己保存所有这些数据,使用pickle 或joblib 更容易。

    k = KMeans.__new__(KMeans)
    
    k.cluster_centers_ = best_centers
    k._n_features_out = self.cluster_centers_.shape[0]
    k.labels_ = best_labels
    k.inertia_ = best_inertia
    k.n_iter_ = best_n_iter
    

    【讨论】:

      猜你喜欢
      • 2019-04-09
      • 2014-10-29
      • 2015-09-17
      • 2011-04-25
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多