La seguente spiegazione si basa su fit_transform
di Imputer
classe, ma l'idea è la stessa per fit_transform
altre classi scikit_learn piace MinMaxScaler
.
transform
sostituisce i valori mancanti con un numero. Per impostazione predefinita, questo numero è il mezzo di colonne di alcuni dati scelti. Considera il seguente esempio:
imp = Imputer()
# calculating the means
imp.fit([[1, 3], [np.nan, 2], [8, 5.5]])
Ora l'imputer ha imparato a usare una media (1 + 8) / 2 = 4.5 per la prima colonna e media (2 + 3 + 5.5) / 3 = 3.5 per la seconda colonna quando viene applicata a dati a due colonne:
X = [[np.nan, 11],
[4, np.nan],
[8, 2],
[np.nan, 1]]
print(imp.transform(X))
noi abbiamo
[[4.5, 11],
[4, 3.5],
[8, 2],
[4.5, 1]]
Quindi fit
dall'imputer calcola la media delle colonne da alcuni dati, e con transform
essa applica quei mezzi ad alcuni dati (che sta semplicemente sostituendo i valori mancanti con i mezzi). Se entrambi questi dati sono uguali (ovvero i dati per il calcolo dei mezzi e i dati ai quali vengono applicati) è possibile utilizzare fit_transform
che è sostanzialmente fit
seguito da un transform
.
Ora le tue domande:
Perché potremmo aver bisogno di trasformare i dati?
"Per vari motivi, molti set di dati del mondo reale contengono valori mancanti, spesso codificati come spazi vuoti, NaN o altri segnaposto. Tali set di dati sono tuttavia incompatibili con gli stimatori di apprendimento di scikit che presuppongono che tutti i valori in un array siano numerici" ( fonte )
Che cosa significa adattamento del modello ai dati di allenamento e trasformazione in dati di test?
Il fit
di un imputer non ha nulla a che fare con l' fit
usato nel montaggio del modello. Pertanto, l'utilizzo di un imputer fit
sui dati di allenamento calcola solo i mezzi di ciascuna colonna di dati di allenamento. L'utilizzo transform
dei dati di test sostituisce quindi i valori mancanti dei dati di test con mezzi calcolati dai dati di allenamento.