Die folgende Erklärung wird auf der Grundlage fit_transform
der Imputer
Klasse, aber die Idee ist das gleiche für fit_transform
andere scikit_learn Klassen mögen MinMaxScaler
.
transform
Ersetzt die fehlenden Werte durch eine Zahl. Standardmäßig ist diese Zahl das Mittel der Spalten einiger Daten, die Sie auswählen. Betrachten Sie das folgende Beispiel:
imp = Imputer()
# calculating the means
imp.fit([[1, 3], [np.nan, 2], [8, 5.5]])
Jetzt hat der Imputer gelernt, einen Mittelwert (1 + 8) / 2 = 4,5 für die erste Spalte und einen Mittelwert (2 + 3 + 5,5) / 3 = 3,5 für die zweite Spalte zu verwenden, wenn er auf zweispaltige Daten angewendet wird:
X = [[np.nan, 11],
[4, np.nan],
[8, 2],
[np.nan, 1]]
print(imp.transform(X))
wir bekommen
[[4.5, 11],
[4, 3.5],
[8, 2],
[4.5, 1]]
Also fit
berechnet der Imputer aus einigen Daten die Mittelwerte der Spalten und transform
wendet diese Mittelwerte auf einige Daten an (wobei nur fehlende Werte durch die Mittelwerte ersetzt werden). Wenn diese beiden Daten identisch sind (dh die Daten für die Mittelwertberechnung und die Daten, auf die die Mittelwerte angewendet werden), können Sie fit_transform
im Grunde genommen a fit
gefolgt von a verwenden transform
.
Nun deine Fragen:
Warum müssen wir möglicherweise Daten transformieren?
"Aus verschiedenen Gründen enthalten viele reale Datasets fehlende Werte, die häufig als Leerzeichen, NaNs oder andere Platzhalter codiert sind. Solche Datasets sind jedoch nicht mit Schätzern kompatibel, bei denen Scikit-Learn vorausgesetzt wird, dass alle Werte in einem Array numerisch sind." ( Quelle )
Was bedeutet es, das Modell an die Trainingsdaten anzupassen und in Testdaten umzuwandeln?
Das fit
eines Imputers hat nichts mit der fit
Verwendung in der Modellmontage zu tun . Die Verwendung von Imputer fit
für Trainingsdaten berechnet also nur die Mittelwerte für jede Spalte von Trainingsdaten. Die Verwendung transform
von Testdaten ersetzt dann fehlende Werte von Testdaten durch Mittelwerte, die aus Trainingsdaten berechnet wurden.