保存 StandardScaler() 模型以用于新数据集

Posted

技术标签:

【中文标题】保存 StandardScaler() 模型以用于新数据集【英文标题】:Saving StandardScaler() model for use on new datasets 【发布时间】:2019-04-08 17:00:06 【问题描述】:

如何在 Sklearn 中保存 StandardScaler() 模型?我需要使模型可操作,并且不想一次又一次地加载训练数据以供 StandardScaler 学习,然后将其应用于我想要进行预测的新数据。

from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

#standardizing after splitting
X_train, X_test, y_train, y_test = train_test_split(data, target)
sc = StandardScaler()
X_train_std = sc.fit_transform(X_train)
X_test_std = sc.transform(X_test)

【问题讨论】:

【参考方案1】:

您可以使用 joblib dump 函数来保存标准缩放器模型。这是一个完整的示例供参考。

from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

data, target = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(data, target)

sc = StandardScaler()
X_train_std = sc.fit_transform(X_train)

如果您想保存 sc 标准调用程序,请使用以下

from sklearn.externals.joblib import dump, load
dump(sc, 'std_scaler.bin', compress=True)

这将创建文件 std_scaler.bin 并保存 sklearn 模型。

要稍后读取模型,请使用 load

sc=load('std_scaler.bin')

注意:sklearn.externals.joblib 已弃用。安装并使用纯 joblib 代替

【讨论】:

【参考方案2】:

或者如果你喜欢腌制:

import pickle
pickle.dump(sc, open('file/path/scaler.pkl','wb'))

sc = pickle.load(open('file/path/scaler.pkl','rb'))

【讨论】:

这应该是公认的答案。虽然,我更喜欢使用 with open().. 而不是依靠 gc 来关闭文件。

以上是关于保存 StandardScaler() 模型以用于新数据集的主要内容,如果未能解决你的问题,请参考以下文章

sklearn StandardScaler 返回全零

当机器学习模型标准化时如何预测新值 StandardScaler

[sklearn][standardscaler] 我可以反转模型输出的标准缩放器吗?

SVM 分类器模型上的 StandardScaler 问题

线性模型文本分类中的特征重要性,StandardScaler(with_mean=False) yes or no

sklearn.preprocessing.StandardScaler数据标准化