是否将Python kmodes群集模型保存到磁盘?

时间:2018-03-23 02:03:20

标签: python cluster-analysis hdf5

背景

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

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

要求

我可以使用任何文件格式,包括HDF5 format。我也不会与 var src = st; var pattern = @"([0-9].[0-9]{4}mm)"; var expr = new Regex(pattern, RegexOptions.IgnoreCase); foreach (Match match in expr.Matches(src)) { string key = match.Groups[1].Value; string key2 = match.Groups[2].Value; label1.Text = key + key2; } 结合,但我需要能够处理混合的分类和数字数据。

帮助

我似乎无法找到 任何 方式,我可以将完整的kmodes模型保存到磁盘,但我希望我只是缺少明显的东西。请提供任何可能的选择。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

以下链接指向使用pickle保存模型的sklearn文档或来自joblib的序列化代码:http://scikit-learn.org/stable/modules/model_persistence.html

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

答案 2 :(得分:1)

您正在寻找Python pickle库。

  

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

我认为this对您来说是一个非常有用的资源。

要查看的另一个库包括cPickle。为什么呢?

  

首先,cPickle可以比pickle快1000倍,因为   前者在C中实施。

鉴于您需要将模型保存到磁盘,这可能意味着您的模型非常大。时间是一个优先事项 - 这将为您节省大量时间。

  

第二,在cPickle模块中   callecbles Pickler()和Unpickler()是函数,而不是类。这个   意味着你不能用它们来推导自定义酸洗和   unpickling子类。大多数应用程序都不需要这样做   功能和应该从大大提高的性能中受益   cPickle模块。

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