A seguinte explicação é baseada na fit_transform
da Imputer
classe, mas a idéia é a mesma para fit_transform
outras classes scikit_learn gosto MinMaxScaler
.
transform
substitui os valores ausentes por um número. Por padrão, esse número é o meio das colunas de alguns dados que você escolher. Considere o seguinte exemplo:
imp = Imputer()
# calculating the means
imp.fit([[1, 3], [np.nan, 2], [8, 5.5]])
Agora, o imputador aprendeu a usar uma média (1 + 8) / 2 = 4,5 para a primeira coluna e média (2 + 3 + 5,5) / 3 = 3,5 para a segunda coluna, quando aplicada a dados de duas colunas:
X = [[np.nan, 11],
[4, np.nan],
[8, 2],
[np.nan, 1]]
print(imp.transform(X))
Nós temos
[[4.5, 11],
[4, 3.5],
[8, 2],
[4.5, 1]]
Portanto, fit
o imputador calcula as médias das colunas de alguns dados e transform
aplica esses meios a alguns dados (que substitui apenas os valores ausentes pelos médios). Se esses dois dados forem os mesmos (ou seja, os dados para calcular as médias e os dados aos quais são aplicadas), você poderá usar o fit_transform
que é basicamente a fit
seguido por a transform
.
Agora suas perguntas:
Por que precisamos transformar dados?
"Por várias razões, muitos conjuntos de dados do mundo real contêm valores ausentes, geralmente codificados como espaços em branco, NaNs ou outros espaços reservados. Esses conjuntos de dados, no entanto, são incompatíveis com os estimadores do scikit-learn que assumem que todos os valores em uma matriz são numéricos" ( fonte )
O que significa ajustar modelo em dados de treinamento e transformar em dados de teste?
O fit
de um imputador não tem nada a ver com o fit
usado no ajuste do modelo. Portanto, o uso do imputer fit
nos dados de treinamento apenas calcula as médias de cada coluna de dados de treinamento. O uso transform
de dados de teste substitui os valores ausentes dos dados de teste por meios que foram calculados a partir dos dados de treinamento.