Le prétraitement des données d'entraînement comprend un processus appelé normalisation qui modifie la plage réelle de données. Pour la mise en œuvre de la normalisation, scikit-learn (ci-après appelé sklearn) a une fonction appelée fit_transform. Cette fois, nous partagerons l'implémentation qui normalise les données d'entraînement et les données de validation avec l'exemple de code.
Il existe trois types principaux de fonctions de normalisation fournies par sklearn et des processus en deux étapes.
transform() Convertir les données à l'aide des paramètres calculés à partir de la fonction d'ajustement
fit_transform() Exécutez le processus ci-dessus en continu
Si vous souhaitez normaliser certaines données, vous devez utiliser la fonction fit_transorm pour calculer les paramètres et convertir les données en même temps. .. Cependant, lors de la conversion de données en prétraitement pendant l'entraînement, il est nécessaire d'utiliser les mêmes paramètres (résultats de la fonction d'ajustement) pour les données d'entraînement et les données de vérification. * Un exemple simple est affiché avec l'exemple de code. Par conséquent, fit () qui calcule les paramètres pour certaines données et la fonction de transformation qui se transforme en utilisant les paramètres calculés sont fournis.
Il semble qu'il y ait 27 types à la suite de la vérification avec la référence de sklearn. Je n'ai utilisé que quelques types, mais si vous êtes intéressé, veuillez vous y référer. API Reference sklearn.preprocessing scikit-learn 0.19.2 documentation
Méthodes de conversion couramment utilisées -MinMaxScaler () # Définit les valeurs maximales / minimales des données ・ StandardScaler () # standardisation
Vous trouverez ci-dessous un exemple de normalisation à l'aide de sklearn. Le contenu du processus est commenté sur chaque ligne. En tant que procédure d'exemple de code,
scaler_sample.py
#Si vous n'avez pas importé, veuillez installer à chaque fois.
from sklearn import preprocessing
import numpy as np
import pickle
#Définition de la méthode de normalisation MinMaxScaler(0<=data<=1)
mmscaler = preprocessing.MinMaxScaler()
#Définition des données brutes pour la formation
train_raw = np.array(list(range(11)))
print (train_raw) # [ 0 1 2 3 4 5 6 7 8 9 10]
#Adapté aux données d'entraînement_transform
train_transed = mmscaler.fit_transform(train_raw.reshape(-1,1))
#Affichage des résultats de conversion
#0 à 10 les données sont converties de 0 à 1
print (train_transed.flatten()) # [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]
#Enregistrer les paramètres d'ajustement au format binaire
#Habituellement, le code d'apprentissage et le code de vérification sont implémentés séparément, il est donc présenté comme une méthode pour enregistrer les paramètres.
pickle.dump(mmscaler, open('./scaler.sav', 'wb'))
#En supposant que ce qui précède est implémenté dans une autre fonction, chargez le paramètre d'ajustement enregistré dans les données d'entraînement(Fichier binaire)
save_scaler = pickle.load(open('./scaler.sav', 'rb'))
#Vérifier les détails des paramètres
print(save_scaler,type(save_scaler)) # MinMaxScaler() <class 'sklearn.preprocessing._data.MinMaxScaler'>
#Définition des données de test
test_raw = np.array(list(range(100)))
print (test_raw)
'''print (test_raw)
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
96 97 98 99]
'''
#Convertir à l'aide des paramètres enregistrés(tranform)
save_scaler_transed = save_scaler.transform(test_raw.reshape(-1,1))
print (save_scaler_transed.flatten())
#Étant donné que le poids des données d'entraînement est utilisé, la plage de données va de 0 à 9..Devenir 9
'''print (save_scaler_transed.flatten())
[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. 1.1 1.2 1.3 1.4 1.5 1.6 1.7
1.8 1.9 2. 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3. 3.1 3.2 3.3 3.4 3.5
3.6 3.7 3.8 3.9 4. 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5. 5.1 5.2 5.3
5.4 5.5 5.6 5.7 5.8 5.9 6. 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 7. 7.1
7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 8. 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9
9. 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9]
'''
#Calcul des paramètres à l'aide des données de test+conversion(fit_tranform)
test_fit_transed = mmscaler.fit_transform(test_raw.reshape(-1,1))
#Étant donné que les paramètres sont calculés à partir des données de test, la plage de données passe de 0 à 1.
print (test_fit_transed.flatten())
'''print (test_fit_transed.flatten())
[0. 0.01010101 0.02020202 0.03030303 0.04040404 0.05050505
0.06060606 0.07070707 0.08080808 0.09090909 0.1010101 0.11111111
0.12121212 0.13131313 0.14141414 0.15151515 0.16161616 0.17171717
0.18181818 0.19191919 0.2020202 0.21212121 0.22222222 0.23232323
0.24242424 0.25252525 0.26262626 0.27272727 0.28282828 0.29292929
0.3030303 0.31313131 0.32323232 0.33333333 0.34343434 0.35353535
0.36363636 0.37373737 0.38383838 0.39393939 0.4040404 0.41414141
0.42424242 0.43434343 0.44444444 0.45454545 0.46464646 0.47474747
0.48484848 0.49494949 0.50505051 0.51515152 0.52525253 0.53535354
0.54545455 0.55555556 0.56565657 0.57575758 0.58585859 0.5959596
0.60606061 0.61616162 0.62626263 0.63636364 0.64646465 0.65656566
0.66666667 0.67676768 0.68686869 0.6969697 0.70707071 0.71717172
0.72727273 0.73737374 0.74747475 0.75757576 0.76767677 0.77777778
0.78787879 0.7979798 0.80808081 0.81818182 0.82828283 0.83838384
0.84848485 0.85858586 0.86868687 0.87878788 0.88888889 0.8989899
0.90909091 0.91919192 0.92929293 0.93939394 0.94949495 0.95959596
0.96969697 0.97979798 0.98989899 1. ]
'''
J'ai fait cet article comme un mémorandum de ce que j'ai appris sur la normalisation. Avant de chercher, je n'ai pas remarqué du tout la différence entre fit_transform () et transform (). .. Il s'agit d'une conversion importante du prétraitement et affecte également l'exactitude des données à vérifier. Nous espérons qu'il n'y aura pas de cas où les paramètres seront réutilisés par inadvertance. En écrivant cet article, j'ai emprunté la sagesse de mes prédécesseurs. Je l'écrirai plus tard. Merci pour la lecture. Si vous aimez LGTM, s'il vous plaît!
Recommended Posts