在sklearn中保存MinMaxScaler模型

Lui*_*uez 25 python machine-learning normalization scikit-learn

我在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]]
Run Code Online (Sandbox Code Playgroud)

现在我想使用相同的缩放器来规范化测试集:

   [[ 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]]
Run Code Online (Sandbox Code Playgroud)

但我不想这样一直使用scaler.fit()和训练数据.有没有办法保存缩放器并稍后从其他文件加载?

Iva*_*ner 61

甚至比pickle(创建比这个方法更大的文件)更好,你可以使用sklearn内置工具:

from sklearn.externals import joblib
scaler_filename = "scaler.save"
joblib.dump(scaler, scaler_filename) 

# And now to load...

scaler = joblib.load(scaler_filename) 
Run Code Online (Sandbox Code Playgroud)

  • 它不是——`joblib.dump` 是为转储 sklearn 对象而优化的,因此创建的文件比 pickle 小得多,pickle 转储对象及其所有依赖项等。 (2认同)

Eng*_*ero 24

只是一个sklearn.externals.joblib已被弃用并被普通 old 取代的注释,joblib可以安装pip install joblib

import joblib
joblib.dump(my_scaler, 'scaler.gz')
my_scaler = joblib.load('scaler.gz')
Run Code Online (Sandbox Code Playgroud)

请注意,文件扩展名可以是任何内容,但如果是其中之一,['.z', '.gz', '.bz2', '.xz', '.lzma']则将使用相应的压缩协议。文档joblib.dump()joblib.load()方法。


jla*_*s32 19

所以我实际上不是这方面的专家,但是通过一些研究和一些有用的链接,我认为pickle并且sklearn.externals.joblib将成为你的朋友.

该软件包pickle允许您将模型或"转储"模型保存到文件中.

我认为这个链接也很有帮助.它讨论了创建持久性模型.你想要尝试的东西是:

# 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') 
Run Code Online (Sandbox Code Playgroud)

这里您可以了解更多关于sklearn外部的信息.

如果这没有帮助,或者我不了解您的模型,请告诉我.

  • 出于某种原因,当我使用它来保存`MinMaxScaler`时,加载的缩放器不会将数据缩放到新安装的缩放器上.知道为什么吗? (2认同)

Psi*_*dom 8

您可以使用pickle,来保存缩放器:

import pickle
scalerfile = 'scaler.sav'
pickle.dump(scaler, open(scalerfile, 'wb'))
Run Code Online (Sandbox Code Playgroud)

加载它:

import pickle
scalerfile = 'scaler.sav'
scaler = pickle.load(open(scalerfile, 'rb'))
test_scaled_set = scaler.transform(test_set)
Run Code Online (Sandbox Code Playgroud)


PSN*_*PSN 6

执行此操作的最佳方法是创建一个如下所示的 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)
Run Code Online (Sandbox Code Playgroud)

现在您可以将其保存到文件中:

joblib.dump(model, 'filename.mod') 
Run Code Online (Sandbox Code Playgroud)

稍后您可以像这样加载它:

model = joblib.load('filename.mod')
Run Code Online (Sandbox Code Playgroud)

  • 您可以在此处使用 joblib 或 pickle。重点是创建一个管道,这样您就不必单独调用缩放器。 (2认同)