Die Vorverarbeitung von Trainingsdaten umfasst einen Prozess namens Normalisierung, der den tatsächlichen Datenbereich ändert. Für die Implementierung der Normalisierung bietet scikit-learn (im Folgenden als sklearn bezeichnet) eine Funktion namens fit_transform. Dieses Mal werden wir die Implementierung, die die Trainingsdaten und Validierungsdaten normalisiert, mit dem Beispielcode teilen.
Es gibt drei Haupttypen von Normalisierungsfunktionen, die von sklearn bereitgestellt werden, und es gibt zweistufige Prozesse.
transform() Konvertieren Sie Daten mithilfe von Parametern, die aus der Anpassungsfunktion berechnet wurden
fit_transform() Führen Sie den obigen Vorgang kontinuierlich aus
Wenn Sie bestimmte Daten normalisieren möchten, sollten Sie die Funktion fit_transorm verwenden, um die Parameter zu berechnen und gleichzeitig die Daten zu konvertieren. .. Bei der Konvertierung von Daten als Vorverarbeitung während des Trainings müssen jedoch dieselben Parameter (Ergebnisse der Anpassungsfunktion) für die Trainingsdaten und die Verifizierungsdaten verwendet werden. * Ein einfaches Beispiel wird mit dem Beispielcode angezeigt. Daher wird fit () bereitgestellt, das die Parameter für bestimmte Daten berechnet, und die Transformationsfunktion, die unter Verwendung der berechneten Parameter transformiert.
Es scheint, dass es 27 Typen gibt, die sich aus der Überprüfung mit der Referenz von sklearn ergeben. Ich habe nur einige Typen verwendet, aber wenn Sie interessiert sind, beziehen Sie sich bitte darauf. API Reference sklearn.preprocessing scikit-learn 0.19.2 documentation
Häufig verwendete Konvertierungsmethoden -MinMaxScaler () # Definieren Sie maximale / minimale Datenwerte ・ Standardisierung von StandardScaler () #
Unten finden Sie ein Beispiel für die Normalisierung mit sklearn. Der Inhalt des Prozesses wird in jeder Zeile kommentiert. Als ein Verfahren des Beispielcodes,
scaler_sample.py
#Wenn Sie nicht importiert haben, installieren Sie diese bitte jedes Mal.
from sklearn import preprocessing
import numpy as np
import pickle
#Definition der Normalisierungsmethode MinMaxScaler(0<=data<=1)
mmscaler = preprocessing.MinMaxScaler()
#Rohdatendefinition für das Training
train_raw = np.array(list(range(11)))
print (train_raw) # [ 0 1 2 3 4 5 6 7 8 9 10]
#Fit mit Trainingsdaten_transform
train_transed = mmscaler.fit_transform(train_raw.reshape(-1,1))
#Anzeige des Conversion-Ergebnisses
#0 bis 10 Daten werden von 0 nach 1 konvertiert
print (train_transed.flatten()) # [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]
#Speichern Sie die Anpassungsparameter im Binärformat
#Normalerweise werden der Lerncode und der Verifizierungscode separat implementiert, sodass er als Methode zum Speichern der Parameter eingeführt wird.
pickle.dump(mmscaler, open('./scaler.sav', 'wb'))
#Unter der Annahme, dass das Obige in einer anderen Funktion implementiert ist, laden Sie den in den Trainingsdaten gespeicherten Anpassungsparameter(Binärdatei)
save_scaler = pickle.load(open('./scaler.sav', 'rb'))
#Überprüfen Sie die Parameterdetails
print(save_scaler,type(save_scaler)) # MinMaxScaler() <class 'sklearn.preprocessing._data.MinMaxScaler'>
#Testdatendefinition
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]
'''
#Konvertieren Sie mit gespeicherten Parametern(tranform)
save_scaler_transed = save_scaler.transform(test_raw.reshape(-1,1))
print (save_scaler_transed.flatten())
#Da das Gewicht der Trainingsdaten verwendet wird, liegt der Datenbereich zwischen 0 und 9..9 werden
'''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]
'''
#Parameterberechnung anhand von Testdaten+Umwandlung(fit_tranform)
test_fit_transed = mmscaler.fit_transform(test_raw.reshape(-1,1))
#Da die Parameter aus den Testdaten berechnet werden, ändert sich der Datenbereich von 0 auf 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. ]
'''
Ich habe diesen Artikel als Memorandum über das gemacht, was ich über Normalisierung gelernt habe. Bevor ich es nachgeschlagen habe, habe ich den Unterschied zwischen fit_transform () und transform () überhaupt nicht bemerkt. .. Dies ist eine wichtige Konvertierung der Vorverarbeitung und wirkt sich auch auf die Genauigkeit der zu überprüfenden Daten aus. Wir hoffen, dass es keine Fälle gibt, in denen die Parameter versehentlich wiederverwendet werden. Beim Schreiben dieses Artikels habe ich mir die Weisheit meiner Vorgänger geliehen. Ich werde es zu einem späteren Zeitpunkt schreiben. Danke fürs Lesen. Wenn Sie LGTM mögen, bitte!
Recommended Posts