J'utilise le modèle MinMaxScaler
dans sklearn pour normaliser les fonctionnalités d'un modèle.
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]]
Maintenant, je veux utiliser le même scaler pour normaliser l'ensemble de test:
[[ 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]]
Mais je ne veux pas utiliser la scaler.fit()
avec les données d'entraînement tout le temps. Existe-t-il un moyen de sauvegarder le scaler et de le charger plus tard à partir d'un fichier différent?
Je ne suis donc pas un expert en la matière, mais à partir d'un peu de recherche et de quelques informations utiles liens , je pense que pickle
et sklearn.externals.joblib
vont être vos amis ici.
Le package pickle
vous permet d'enregistrer des modèles ou des modèles "dump" dans un fichier.
Je pense que cela link est également utile. Il parle de créer un modèle de persistance. Vous allez essayer quelque chose:
# 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')
Ici est l'endroit où vous pouvez en savoir plus sur les externes sklearn.
Faites-moi savoir si cela n'aide pas ou si je ne comprends rien à votre modèle.
Encore mieux que pickle
(qui crée des fichiers beaucoup plus volumineux que cette méthode), vous pouvez utiliser l'outil intégré de sklearn
:
from sklearn.externals import joblib
scaler_filename = "scaler.save"
joblib.dump(scaler, scaler_filename)
# And now to load...
scaler = joblib.load(scaler_filename)
Vous pouvez utiliser pickle
, pour enregistrer le scaler:
import pickle
scalerfile = 'scaler.sav'
pickle.dump(scaler, open(scalerfile, 'wb'))
Rechargez-le:
import pickle
scalerfile = 'scaler.sav'
scaler = pickle.load(open(scalerfile, 'rb'))
test_scaled_set = scaler.transform(test_set)
Juste une note que sklearn.externals.joblib
A été déprécié et est remplacé par le vieux joblib
, qui peut être installé avec pip install joblib
:
import joblib
joblib.dump(my_scaler, 'scaler.pkl')
my_scaler = joblib.load('scaler.pkl')
Documents pour les méthodes joblib.dump()
et joblib.load()
.
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')