使用 sklearn KMeans 与初始质心而不拟合模型

问题描述 投票:0回答:1

我已经安装了 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 k-means jsonlines
1个回答
1
投票

您可以序列化该对象。您可以使用

pickle
joblib
Sklearn的首选方法是使用
joblib

from joblib import dump, load

k = KMeans()

# fit and stuff here

dump(k, 'filename.joblib')

# later on

k = load('filename.joblib') 

至于像您所要求的那样在对象上设置值,您可以尝试设置 K-means 在拟合后定义的所有 属性 。不过,您必须自己保存所有这些数据,并且使用

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
© www.soinside.com 2019 - 2024. All rights reserved.