Die folgende Erklärung wird auf der Grundlage fit_transformder ImputerKlasse, aber die Idee ist das gleiche für fit_transformandere scikit_learn Klassen mögen MinMaxScaler.
transformErsetzt 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 fitberechnet der Imputer aus einigen Daten die Mittelwerte der Spalten und transformwendet 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_transformim Grunde genommen a fitgefolgt 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 fiteines Imputers hat nichts mit der fitVerwendung in der Modellmontage zu tun . Die Verwendung von Imputer fitfür Trainingsdaten berechnet also nur die Mittelwerte für jede Spalte von Trainingsdaten. Die Verwendung transformvon Testdaten ersetzt dann fehlende Werte von Testdaten durch Mittelwerte, die aus Trainingsdaten berechnet wurden.