代码之家  ›  专栏  ›  技术社区  ›  Mike Williamson

将Python kmodes集群模型保存到磁盘的方法?

  •  0
  • Mike Williamson  · 技术社区  · 6 年前

    出身背景

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

    我需要能够 拯救 这些模型,因为我计划在生产管道中使用它,如果管道中出现故障,我希望能够“回滚”到旧的工作模型。

    要求

    我可以使用任何文件格式,包括 HDF5 format 。我也没有结婚 K模式 ,但我确实需要能够处理分类数据和数字数据的混合。


    帮助

    我似乎找不到 任何 这样我就可以保存完整的 K模式 模型到磁盘,但我希望我只是错过了一些明显的东西。请提供任何可能的选项。

    3 回复  |  直到 6 年前
        1
  •  8
  •   chthonicdaemon    6 年前

    让我们从 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)
    
        2
  •  1
  •   svohara    6 年前

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

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

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

        3
  •  1
  •   cacti5    6 年前

    你在找蟒蛇 pickle 图书馆

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

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

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

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

    考虑到您需要将模型保存到磁盘,这可能意味着您的模型相当大。时间是最重要的,这将为你节省大量时间。

    其次,在cPickle模块中 可调用的Pickler()和Unpickler()是函数,而不是类。这 意味着您不能使用它们来派生自定义酸洗和 取消勾选子类。大多数应用程序都不需要这样做 功能,并应受益于性能的极大改进 cPickle模块的。

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