【问题标题】:Means to save a Python kmodes clustering model to disk?将 Python kmodes 聚类模型保存到磁盘的方法?
【发布时间】:2018-09-01 15:15:36
【问题描述】:

背景

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

我需要能够保存这些模型,因为我计划在生产管道中使用它,我希望能够“回滚”到旧的工作模型,如果有的话管道失败。

要求

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


帮助

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

【问题讨论】:

  • 请提供投反对票的原因。问题不清楚吗?例如,不需要样本数据。它似乎既自足又不言自明。
  • 你能举个例子吗?在@chthonicdaemon 示例中,KModes 返回的数据是一个简单且高度相关的 numpy 数组,可以非常有效地保存在压缩的 HDF5 格式中。
  • @MikeWilliamson 对于为什么其中一个答案不够好,我将不胜感激一些额外的 cmets...
  • @chthonicdaemon 您的回答已经足够好了。我被其他工作分心了,好几天都没有回到这个页面。非常感谢!非常有帮助,事实上!

标签: python cluster-analysis hdf5


【解决方案1】:

kmodes 和 kprototypes 类似乎继承自 scikit learn 的 BaseEstimator。在 sklearn 中,您可以使用 pickle 通过标准序列化保存/加载经过训练的模型。

这里是关于使用 pickle 或 joblib 中的序列化代码保存模型的 sklearn 文档的链接:http://scikit-learn.org/stable/modules/model_persistence.html

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

【讨论】:

  • 谢谢,@svohara!起初我并不明显 kmodes 继承自 BaseEstimator
【解决方案2】:

让我们从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)

【讨论】:

    【解决方案3】:

    您正在寻找 Python pickle 库。

    pickle 模块实现了一种将任意 Python 对象转换为一系列字节的算法。此过程也称为“序列化”对象。然后可以传输或存储表示对象的字节流,然后重新构建以创建具有相同特征的新对象。

    我认为this 将是您实施它的一个非常有用的资源。

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

    首先,cPickle 可以比 pickle 快 1000 倍,因为 前者是用 C 实现的。

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

    其次,在 cPickle 模块中 可调用的 Pickler() 和 Unpickler() 是函数,而不是类。这 意味着您不能使用它们来派生自定义酸洗和 unpickling 子类。大多数应用程序不需要这个 功能,应该受益于大大提高的性能 cPickle 模块。

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

    【讨论】:

    • 谢谢,@安娜!我也很欣赏picklecPickle 的比较。不过,我选择了@chthon's 作为赏金,因为它提供了一个示例。
    猜你喜欢
    • 2012-09-03
    • 1970-01-01
    • 2013-09-09
    • 2019-10-30
    • 2021-12-15
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多