【问题标题】:How to "save" an IsolationForest Model in Python?如何在 Python 中“保存”一个 IsolationForest 模型?
【发布时间】:2018-04-19 19:03:48
【问题描述】:

大家好,我正在使用sklearn.ensemble.IsolationForest 来预测我的数据的异常值。

是否可以将模型训练(拟合)一次到我的干净数据,然后将其保存以供以后使用? 比如保存模型的一些属性,这样下次就不用再调用fit函数来训练我的模型了。

例如,对于GMM,我会保存每个组件的weights_means_covs_,这样以后我就不需要再次训练模型了。

为了清楚起见,我将其用于在线欺诈检测,其中该 python 脚本将被多次调用以获取相同“类别”的数据,并且我不想每次都训练模型需要执行预测或测试操作。

提前致谢。

【问题讨论】:

  • 最好的方法是使用joblib:查看更多信息in this thread

标签: python machine-learning scikit-learn outliers


【解决方案1】:

sklearn 估计器实现的方法使您可以轻松地保存估计器的相关训练属性。一些估算器自己实现 __getstate__ 方法,但其他估算器,例如 GMM 只使用 base implementation ,它只是保存对象内部字典:

def __getstate__(self):
    try:
        state = super(BaseEstimator, self).__getstate__()
    except AttributeError:
        state = self.__dict__.copy()

    if type(self).__module__.startswith('sklearn.'):
        return dict(state.items(), _sklearn_version=__version__)
    else:
        return state

将模型保存到光盘的推荐方法是使用pickle 模块:

from sklearn import datasets
from sklearn.svm import SVC
iris = datasets.load_iris()
X = iris.data[:100, :2]
y = iris.target[:100]
model = SVC()
model.fit(X,y)
import pickle
with open('mymodel','wb') as f:
    pickle.dump(model,f)

但是,您应该保存额外的数据,以便将来重新训练您的模型,否则会遭受可怕的后果(例如被锁定到旧版本的 sklearn)

来自documentation

为了用未来版本重建一个类似的模型 scikit-learn,额外的元数据应该沿着腌制保存 型号:

训练数据,例如对不可变快照的引用

用于生成模型的python源码

scikit-learn 的版本及其依赖项

在训练数据上得到的交叉验证分数

对于依赖于用 Cython 编写的 tree.pyx 模块(例如 IsolationForest)的 Ensemble 估计器尤其如此,因为它创建了与实现的耦合,这不能保证在 sklearn 版本之间保持稳定。过去它已经看到了向后不兼容的变化。

如果您的模型变得非常大并且加载变得麻烦,您还可以使用更高效的joblib。来自文档:

在scikit的具体情况下,使用起来可能会更有趣 joblib 替换 pickle (joblib.dump & joblib.load),即 在内部携带大型 numpy 数组的对象上更有效 拟合的 scikit-learn 估计器通常是这种情况,但只能 pickle 到磁盘而不是字符串:

【讨论】:

    【解决方案2】:

    https://docs.python.org/2/library/pickle.html

    使用 Pickle 库。

    适合你的模型。

    pickle.dump(obj, file[, protocol])保存它

    pickle.load(file)加载它

    分类你的异常值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 2020-05-18
      • 2022-10-14
      • 2012-08-23
      • 2021-01-05
      • 1970-01-01
      • 2013-10-13
      相关资源
      最近更新 更多