我目前正在使用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
模型保存到磁盘,但我希望我只是缺少明显的东西。请提供任何可能的选择。
答案 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