Soy novato en la ciencia de datos y no entiendo la diferencia entre fit
y fit_transform
métodos en scikit-learn. ¿Alguien puede simplemente explicar por qué podríamos necesitar transformar los datos?
¿Qué significa ajustar el modelo en los datos de entrenamiento y transformarlos en datos de prueba? ¿Significa, por ejemplo, convertir variables categóricas en números en el tren y transformar un nuevo conjunto de características para probar datos?
python
scikit-learn
Kaggle
fuente
fuente
fit
en latraining dataset
y utilizamos eltransform
método deboth
- la formación de datos y los datos de pruebaRespuestas:
Para centrar los datos (hacer que tengan una media cero y un error estándar de la unidad), resta la media y luego divide el resultado por la desviación estándar.
Lo haces en el conjunto de datos de entrenamiento. Pero luego debe aplicar la misma transformación a su conjunto de pruebas (por ejemplo, en validación cruzada), o a ejemplos recién obtenidos antes del pronóstico. Pero debe usar los mismos dos parámetros y (valores) que usó para centrar el conjunto de entrenamiento.σμ σ
Por lo tanto, cada transformación de sklearnμ σ
fit()
solo calcula los parámetros (por ejemplo, y en el caso de StandardScaler ) y los guarda como un estado de objetos internos. Luego, puede llamar a su método para aplicar la transformación a un conjunto particular de ejemplos.σtransform()
fit_transform()
se une a estos dos pasos y se usa para el ajuste inicial de parámetros en el conjunto de entrenamiento , pero también devuelve una transformada . Internamente, solo llama primero y luego con los mismos datos.x ′fit()
transform()
fuente
get_params()
coef_
(es decir, pendiente e intersección), no los devueltos porget_params()
(que, en cambio, devuelve el conjunto de argumentos del constructor del modelo con sus valores asociados).fit_transform()
ya que no nos permitiría acceder al estado de los objetos internos, para transformar ejemplos posteriores con los mismos parámetros que se obtuvieron usandofit()
el conjunto de datos inicial? Esto surge, por ejemplo, cuando tiene un conjunto de datos de prueba y desea transformar el conjunto de prueba para pasarlo a su clasificador entrenado.t.fit_transform(train_data)
,t
está equipado, para que pueda usarlo de manera segurat.transform(test_data)
.La siguiente explicación se basa en la
fit_transform
deImputer
la clase, pero la idea es la misma parafit_transform
las otras clases scikit_learn gustaMinMaxScaler
.transform
reemplaza los valores faltantes con un número. Por defecto, este número es el medio de las columnas de algunos datos que elija. Considere el siguiente ejemplo:Ahora el ordenador ha aprendido a usar una media (1 + 8) / 2 = 4.5 para la primera columna y una media (2 + 3 + 5.5) / 3 = 3.5 para la segunda columna cuando se aplica a datos de dos columnas:
obtenemos
Entonces,
fit
el imputador calcula los medios de las columnas a partir de algunos datos, ytransform
aplica esos medios a algunos datos (que simplemente reemplaza los valores faltantes con los medios). Si ambos datos son iguales (es decir, los datos para calcular las medias y los datos a los que se aplican las medias), puede utilizarlos,fit_transform
que es básicamente unfit
seguido de atransform
.Ahora tus preguntas:
"Por varias razones, muchos conjuntos de datos del mundo real contienen valores faltantes, a menudo codificados como espacios en blanco, NaN u otros marcadores de posición. Sin embargo, estos conjuntos de datos son incompatibles con los estimadores de aprendizaje de scikit que suponen que todos los valores en una matriz son numéricos" ( fuente )
El uso
fit
de una impresora no tiene nada que ver con elfit
utilizado en el ajuste del modelo. Por lo tanto, usar losfit
datos de entrenamiento de la computadora solo calcula los medios de cada columna de datos de entrenamiento. El usotransform
de datos de prueba reemplaza los valores faltantes de datos de prueba con medios que se calcularon a partir de los datos de entrenamiento.fuente
En términos simples, fit_transform significa hacer algunos cálculos y luego hacer la transformación (por ejemplo, calcular el promedio de las columnas a partir de algunos datos y luego reemplazar los valores faltantes). Entonces, para el conjunto de entrenamiento, debe calcular y hacer la transformación.
Pero para el conjunto de prueba, el aprendizaje automático aplica la predicción en función de lo aprendido durante el conjunto de entrenamiento y, por lo tanto, no necesita calcular, solo realiza la transformación.
fuente
Estos métodos se utilizan para las transformaciones de conjuntos de datos en scikit-learn:
Tomemos un ejemplo para los valores de escala en un conjunto de datos:
Aquí, el método de ajuste , cuando se aplica al conjunto de datos de entrenamiento, aprende los parámetros del modelo (por ejemplo, media y desviación estándar). Luego, debemos aplicar el método de transformación en el conjunto de datos de entrenamiento para obtener el conjunto de datos de entrenamiento transformado (escalado). También podríamos realizar ambos pasos en un solo paso aplicando fit_transform en el conjunto de datos de entrenamiento.
Entonces, ¿por qué necesitamos 2 métodos separados: ajuste y transformación ?
En la práctica, necesitamos tener un conjunto de datos de capacitación y prueba por separado, y ahí es donde tener un método de transformación y ajuste por separado ayuda. Aplicamos el ajuste en el conjunto de datos de entrenamiento y utilizamos el método de transformación en ambos: el conjunto de datos de entrenamiento y el conjunto de datos de prueba. Por lo tanto, el entrenamiento y el conjunto de datos de prueba se transforman (escalan) usando los parámetros del modelo que se aprendieron al aplicar el método de ajuste al conjunto de datos de entrenamiento.
Código de ejemplo:
fuente
Esta no es una respuesta técnica pero, con suerte, es útil desarrollar nuestra intuición:
En primer lugar, todos los estimadores reciben capacitación (o "ajuste") en algunos datos de capacitación. Esa parte es bastante sencilla.
En segundo lugar, todos los estimadores de scikit-learn pueden usarse en una tubería y la idea con una tubería es que los datos fluyan a través de la tubería. Una vez que se ajusta a un nivel particular en la tubería, los datos se pasan a la siguiente etapa en la tubería, pero obviamente los datos deben cambiarse (transformarse) de alguna manera; de lo contrario, no necesitaría esa etapa en la tubería en absoluto. Por lo tanto, transformar es una forma de transformar los datos para satisfacer las necesidades de la siguiente etapa en la tubería.
Si no está utilizando una tubería, sigo pensando que es útil pensar en estas herramientas de aprendizaje automático de esta manera porque, incluso el clasificador más simple todavía está realizando una función de clasificación. Toma como entrada algunos datos y produce una salida. Esta es una tubería también; Solo una muy simple.
En resumen, fit realiza el entrenamiento, transform cambia los datos en la tubería para pasarlos a la siguiente etapa de la tubería, y fit_transform realiza el ajuste y la transformación en un paso posiblemente optimizado.
fuente
Al aplicar las transformaciones, está tratando de hacer que sus datos se comporten normalmente, por ejemplo, si tiene dos variables, y miden las distancias, pero tiene las unidades como centímetros y tiene las unidades en kilómetros, por lo que para comparar estos dos, tienen que convertirlos a las mismas unidades ... así como Transformar es hacer un comportamiento similar o hacer que se comporte como una distribución normalV1 V2 V1 V2
Volviendo a otra pregunta, primero construye el modelo en el conjunto de entrenamiento que es (el modelo aprende los patrones o el comportamiento de sus datos del conjunto de entrenamiento) y cuando ejecuta el mismo modelo en el conjunto de prueba, trata de identificar patrones o comportamientos similares Una vez que se identifica, llega a sus conclusiones y da los resultados correspondientes.
fuente
Considere una tarea que requiere que normalicemos los datos. Por ejemplo, podemos usar una normalización min-max o una normalización de puntaje z. Hay algunos parámetros inherentes en el modelo. Los valores mínimo y máximo en la normalización min-max y la desviación media y estándar en la normalización de la puntuación z. La función fit () calcula los valores de estos parámetros.
La función de transformación aplica los valores de los parámetros en los datos reales y proporciona el valor normalizado.
La función fit_transform () realiza ambas en el mismo paso.
Tenga en cuenta que se obtiene el mismo valor si realizamos en 2 pasos o en un solo paso.
fuente
"fit" calcula la media y el estándar que se utilizarán para una escala posterior . (solo un cálculo), no se te da nada .
"transform" utiliza una media calculada previamente y std para escalar automáticamente los datos (restar la media de todos los valores y luego dividirla por std).
"fit_transform" hace ambas cosas al mismo tiempo. Entonces puede hacerlo con 1 línea de código en lugar de 2.
Ahora veámoslo en la práctica:
Para el conjunto de entrenamiento X , hacemos "fit_transform" porque necesitamos calcular la media y el estándar, y luego usarlo para escalar automáticamente los datos. Para el conjunto de pruebas X , bueno, ya tenemos la media y el estándar, así que solo hacemos la parte de "transformación".
Es super simple. Lo estás haciendo genial. Sigan con su buen trabajo amigo :-)
fuente