将 Python kmodes 聚类模型保存到磁盘的方法?

Means to save a Python kmodes clustering model to disk?

背景

我目前正在使用 kmodes python package 对包含分类参数的数据执行无监督学习。

我需要能够 保存 这些模型,因为我计划在生产管道中使用它,我希望能够 "roll back" ,工作模型,如果管道中的某些东西失败了。

要求

我可以使用任何文件格式,包括 HDF5 format。我也不拘泥于 kmodes,但是我确实需要能够处理混合的分类数据和数字数据。


帮助

我似乎找不到 任何 方法可以将完整的 kmodes 模型保存到磁盘,但我'我希望我只是遗漏了一些明显的东西。请提供任何可能的选项。

看起来 kmodes 和 kprototypes 类 继承自 scikit learn 的 BaseEstimator。在 sklearn 中,您可以 save/load 使用 pickle 通过标准序列化训练模型。

这里有一个 link sklearn 文档,介绍如何使用 pickle 或来自 joblib 的序列化代码保存模型:http://scikit-learn.org/stable/modules/model_persistence.html

这个答案是否解决了您的问题? kmodes 模型在您的应用程序中是否不可序列化?

让我们从 project's README 中的聚类示例开始:

import numpy as np
from kmodes.kmodes import KModes

# random categorical data
data = np.random.choice(20, (100, 10))

km = KModes(n_clusters=4, init='Huang', n_init=5, verbose=1)

clusters = km.fit_predict(data)

我们现在可以使用 pickle 模块保存它:

import pickle

# It is important to use binary access
with open('km.pickle', 'wb') as f:
    pickle.dump(km, f)

要读回对象,请使用

with open('km.pickle', 'rb') as f:
    km = pickle.load(f)

您正在查找 Python pickle 库。

The pickle module implements an algorithm for turning an arbitrary Python object into a series of bytes. This process is also called serializing” the object. The byte stream representing the object can then be transmitted or stored, and later reconstructed to create a new object with the same characteristics.

我认为 this 对您实施它非常有用。

另一个要研究的库包括 cPickle。为什么?

First, cPickle can be up to 1000 times faster than pickle because the former is implemented in C.

鉴于您需要将模型保存到磁盘,这可能意味着您的模型相当大。时间是重中之重——这将为您节省大量时间。

Second, in the cPickle module the callables Pickler() and Unpickler() are functions, not classes. This means that you cannot use them to derive custom pickling and unpickling subclasses. Most applications have no need for this functionality and should benefit from the greatly improved performance of the cPickle module.

所以这取决于您的程序和所需的功能。可以找到使用 cPickle 的一个很好的例子 here