在 sklearn 中保存 MinMaxScaler 模型
Save MinMaxScaler model in sklearn
我在 sklearn 中使用 MinMaxScaler
模型来标准化模型的特征。
training_set = np.random.rand(4,4)*10
training_set
[[ 6.01144787, 0.59753007, 2.0014852 , 3.45433657],
[ 6.03041646, 5.15589559, 6.64992437, 2.63440202],
[ 2.27733136, 9.29927394, 0.03718093, 7.7679183 ],
[ 9.86934288, 7.59003904, 6.02363739, 2.78294206]]
scaler = MinMaxScaler()
scaler.fit(training_set)
scaler.transform(training_set)
[[ 0.49184811, 0. , 0.29704831, 0.15972182],
[ 0.4943466 , 0.52384506, 1. , 0. ],
[ 0. , 1. , 0. , 1. ],
[ 1. , 0.80357559, 0.9052909 , 0.02893534]]
现在我想使用相同的缩放器对测试集进行归一化:
[[ 8.31263467, 7.99782295, 0.02031658, 9.43249727],
[ 1.03761228, 9.53173021, 5.99539478, 4.81456067],
[ 0.19715961, 5.97702519, 0.53347403, 5.58747666],
[ 9.67505429, 2.76225253, 7.39944931, 8.46746594]]
但我不想一直使用 scaler.fit()
和训练数据。有没有办法保存缩放器并稍后从不同的文件加载它?
您可以使用pickle
,来保存缩放器:
import pickle
scalerfile = 'scaler.sav'
pickle.dump(scaler, open(scalerfile, 'wb'))
加载回来:
import pickle
scalerfile = 'scaler.sav'
scaler = pickle.load(open(scalerfile, 'rb'))
test_scaled_set = scaler.transform(test_set)
更新: sklearn.externals.joblib
已弃用。安装并使用纯 joblib
代替。请参阅 ,其他方面与我的完全相同。
原回答
甚至比 pickle
更好(创建的文件比此方法大得多),您可以使用 sklearn
的 built-in 工具:
from sklearn.externals import joblib
scaler_filename = "scaler.save"
joblib.dump(scaler, scaler_filename)
# And now to load...
scaler = joblib.load(scaler_filename)
所以我实际上不是这方面的专家,但通过一些研究和一些有用的 links,我认为 pickle
和 sklearn.externals.joblib
会成为你的朋友这里。
包 pickle
可让您将模型或 "dump" 模型保存到文件中。
我认为这个 link 也很有帮助。它讨论了创建持久性模型。您想要尝试的是:
# could use: import pickle... however let's do something else
from sklearn.externals import joblib
# this is more efficient than pickle for things like large numpy arrays
# ... which sklearn models often have.
# then just 'dump' your file
joblib.dump(clf, 'my_dope_model.pkl')
Here 是您可以了解有关 sklearn 外部组件的更多信息的地方。
如果这没有帮助或者我不了解您的模型,请告诉我。
注意:sklearn.externals.joblib
已弃用。安装并使用纯 joblib
而不是
请注意 sklearn.externals.joblib
已被弃用并被普通的旧 joblib
取代,可以使用 pip install joblib
:
安装
import joblib
joblib.dump(my_scaler, 'scaler.gz')
my_scaler = joblib.load('scaler.gz')
请注意,文件扩展名可以是任何内容,但如果是 ['.z', '.gz', '.bz2', '.xz', '.lzma']
之一,则将使用相应的压缩协议。 joblib.dump()
and joblib.load()
方法的文档。
执行此操作的最佳方法是创建如下所示的 ML 管道:
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import MinMaxScaler
from sklearn.externals import joblib
pipeline = make_pipeline(MinMaxScaler(),YOUR_ML_MODEL() )
model = pipeline.fit(X_train, y_train)
现在您可以将其保存到文件中:
joblib.dump(model, 'filename.mod')
稍后你可以这样加载它:
model = joblib.load('filename.mod')
我在 sklearn 中使用 MinMaxScaler
模型来标准化模型的特征。
training_set = np.random.rand(4,4)*10
training_set
[[ 6.01144787, 0.59753007, 2.0014852 , 3.45433657],
[ 6.03041646, 5.15589559, 6.64992437, 2.63440202],
[ 2.27733136, 9.29927394, 0.03718093, 7.7679183 ],
[ 9.86934288, 7.59003904, 6.02363739, 2.78294206]]
scaler = MinMaxScaler()
scaler.fit(training_set)
scaler.transform(training_set)
[[ 0.49184811, 0. , 0.29704831, 0.15972182],
[ 0.4943466 , 0.52384506, 1. , 0. ],
[ 0. , 1. , 0. , 1. ],
[ 1. , 0.80357559, 0.9052909 , 0.02893534]]
现在我想使用相同的缩放器对测试集进行归一化:
[[ 8.31263467, 7.99782295, 0.02031658, 9.43249727],
[ 1.03761228, 9.53173021, 5.99539478, 4.81456067],
[ 0.19715961, 5.97702519, 0.53347403, 5.58747666],
[ 9.67505429, 2.76225253, 7.39944931, 8.46746594]]
但我不想一直使用 scaler.fit()
和训练数据。有没有办法保存缩放器并稍后从不同的文件加载它?
您可以使用pickle
,来保存缩放器:
import pickle
scalerfile = 'scaler.sav'
pickle.dump(scaler, open(scalerfile, 'wb'))
加载回来:
import pickle
scalerfile = 'scaler.sav'
scaler = pickle.load(open(scalerfile, 'rb'))
test_scaled_set = scaler.transform(test_set)
更新: sklearn.externals.joblib
已弃用。安装并使用纯 joblib
代替。请参阅
原回答
甚至比 pickle
更好(创建的文件比此方法大得多),您可以使用 sklearn
的 built-in 工具:
from sklearn.externals import joblib
scaler_filename = "scaler.save"
joblib.dump(scaler, scaler_filename)
# And now to load...
scaler = joblib.load(scaler_filename)
所以我实际上不是这方面的专家,但通过一些研究和一些有用的 links,我认为 pickle
和 sklearn.externals.joblib
会成为你的朋友这里。
包 pickle
可让您将模型或 "dump" 模型保存到文件中。
我认为这个 link 也很有帮助。它讨论了创建持久性模型。您想要尝试的是:
# could use: import pickle... however let's do something else
from sklearn.externals import joblib
# this is more efficient than pickle for things like large numpy arrays
# ... which sklearn models often have.
# then just 'dump' your file
joblib.dump(clf, 'my_dope_model.pkl')
Here 是您可以了解有关 sklearn 外部组件的更多信息的地方。
如果这没有帮助或者我不了解您的模型,请告诉我。
注意:sklearn.externals.joblib
已弃用。安装并使用纯 joblib
而不是
请注意 sklearn.externals.joblib
已被弃用并被普通的旧 joblib
取代,可以使用 pip install joblib
:
import joblib
joblib.dump(my_scaler, 'scaler.gz')
my_scaler = joblib.load('scaler.gz')
请注意,文件扩展名可以是任何内容,但如果是 ['.z', '.gz', '.bz2', '.xz', '.lzma']
之一,则将使用相应的压缩协议。 joblib.dump()
and joblib.load()
方法的文档。
执行此操作的最佳方法是创建如下所示的 ML 管道:
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import MinMaxScaler
from sklearn.externals import joblib
pipeline = make_pipeline(MinMaxScaler(),YOUR_ML_MODEL() )
model = pipeline.fit(X_train, y_train)
现在您可以将其保存到文件中:
joblib.dump(model, 'filename.mod')
稍后你可以这样加载它:
model = joblib.load('filename.mod')