web-dev-qa-db-ja.com

sklearnにMinMaxScalerモデルを保存する

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()を常にトレーニングデータで使用したくないのです。スケーラーを保存し、後で別のファイルからロードする方法はありますか?

だから私は実際にはこれに関する専門家ではないが、少しの研究といくつかの有用な links から、picklesklearn.externals.joblibはあなたの友達になります。

パッケージpickleを使用すると、モデルを保存したり、モデルをファイルにダンプしたりできます。

これは 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') 

ここ は、sklearnの外観についての詳細を学ぶことができる場所です。

それが役に立たない場合、またはあなたのモデルについて何か理解していない場合はお知らせください。

15
jlarks32

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) 
57
Ivan Vegner

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)
8
Psidom

_sklearn.externals.joblib_は非推奨になり、単純な古い joblib に置き換えられていることに注意してください。これは_pip install joblib_でインストールできます。

_import joblib
joblib.dump(my_scaler, 'scaler.pkl')
my_scaler = joblib.load('scaler.pkl')
_

joblib.dump() および joblib.load() メソッドのドキュメント。

3
Engineero

これを行う最適な方法は、次のような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')
2
PSN