Preparación de datos para la clasificación
Aprenda a usar AutoML para preparar los datos para la clasificación.
En este artículo se describe cómo AutoML prepara los datos para el entrenamiento de clasificación y describe la configuración de datos configurable. Puede ajustar estas opciones durante la configuración del experimento en la Interfaz de usuario de AutoML.
Para configurar estas opciones mediante la API de AutoML), consulte la Referencia de la API de Python de AutoML.
Tipos de características de datos admitidos
Solo se admiten los tipos de características que se enumeran a continuación. Por ejemplo, no se admiten imágenes.
Se admiten los siguientes tipos de características:
- Numérica (
ByteType
,ShortType
,IntegerType
,LongType
,FloatType
, yDoubleType
) - Boolean
- Cadena (texto categórico o en inglés)
- Marcas de tiempo (
TimestampType
,DateType
) - ArrayType[Numeric] (Databricks Runtime 10.4 LTS ML y posteriores)
- DecimalType (Databricks Runtime 11.3 LTS ML y versiones posteriores)
Atribución de valores que faltan
En Databricks Runtime 10.4 LTS ML y posteriores, puede especificar cómo se imputan los valores NULL. En la interfaz de usuario, seleccione un método en la lista desplegable de la columna Impute with en el esquema de tabla. En la API, use el parámetro imputers
. Para más información, consulte Referencia de la API de Python de AutoML.
De forma predeterminada, AutoML selecciona un método de imputación basado en el tipo de columna y el contenido.
Nota:
Si elige un método de imputación distinto del predeterminado, AutoML no realiza la detección de tipos semánticos.
Compatibilidad con conjuntos de datos desequilibrados para problemas de clasificación
Tanto en Databricks Runtime 11.3 LTS ML como en las versiones posteriores, si AutoML detecta que un conjunto de datos está desequilibrado, intentará reducir el desequilibrio del conjunto de datos de entrenamiento mediante un proceso de reducción de muestreo de las clases principales y adición de ponderaciones de clase. AutoML solo equilibra el conjunto de datos de entrenamiento, no los de prueba y validación. Al hacerlo, se garantiza que el rendimiento del modelo siempre se evalúa en el conjunto de datos no enriquecido con la distribución de clase de entrada verdadera.
Para equilibrar un conjunto de datos de entrenamiento desequilibrado, AutoML usa ponderaciones de clase que están inversamente relacionadas con el grado por el que se reduce el muestreo de una clase determinada. Por ejemplo, si un conjunto de datos de entrenamiento con 100 muestras tiene 95 muestras pertenecientes a la clase A y cinco muestras pertenecientes a la clase B, AutoML reduce este desequilibrio al reducir el muestreo de la clase A a 70 muestras, es decir, la clase de muestreo inferior A por una proporción de 70/95 o 0,736 mientras mantiene el número de muestras de la clase B en 5. Para asegurarse de que el modelo final esta calibrado correctamente y de que la distribución de la probabilidad de la salida del modelo es la misma que la de la entrada, AutoML escala verticalmente la ponderación de la clase A utilizando la proporción 1/0,736 o 1,358, al tiempo que mantiene la ponderación de la clase B en 1. Luego, AutoML usa estas ponderaciones de clase en el entrenamiento del modelo como parámetro para asegurarse de que las muestras de cada clase se ponderan de forma correcta al entrenar el modelo.
Selección de columnas
En Databricks Runtime 10.3 ML y posteriores, puede especificar qué columnas debe usar AutoML para el entrenamiento. Para excluir una columna de la interfaz de usuario, desactive la columna Incluir. En la API, use el parámetro exclude_cols
. Para más información, consulte Referencia de la API de Python de AutoML.
No se puede quitar la columna seleccionada como destino de predicción o como columna de tiempo para dividir los datos.
De manera predeterminada, se incluyen todas las columnas.
División de los datos en conjuntos de entrenamiento, validación y prueba
AutoML divide los datos en tres divisiones para el entrenamiento, la validación y las pruebas. Dependiendo del tipo de problema de ML, tiene diferentes opciones para dividir los datos.
Use los métodos siguientes para dividir los datos en conjuntos de entrenamiento, validación y pruebas:
(Valor predeterminado) División aleatoria: Si no se especifica una estrategia de división de datos, el conjunto de datos se divide aleatoriamente en división de entrenamiento del 60 %, 20 % de validación de división y 20 % división de prueba. Para la clasificación, una división aleatoria estratificada garantiza que cada clase se represente adecuadamente en los conjuntos de entrenamiento, validación y pruebas.
División cronológica: en Databricks Runtime 10.4 LTS ML y versiones posteriores, puede seleccionar una columna de tiempo para crear divisiones cronológicas de entrenamiento, validación y prueba. Las divisiones cronológicas usan los puntos de datos más antiguos para el entrenamiento; los siguientes en antigüedad, para la validación, y los más recientes, en las pruebas. La columna de hora puede ser una marca de tiempo, un entero o una columna de cadena.
División manual: en Databricks Runtime 15.3 ML y versiones posteriores, puede usar la API para configurar una división manual. Especifique una columna dividida y use los valores train
, validate
o test
para identificar las filas que quiere usar para los conjuntos de datos de entrenamiento, validación y prueba. Se omiten todas las filas con valores de columna divididos distintos de train
, test
o validate
y se genera la alerta correspondiente.
Muestreo de grandes conjuntos de datos
Aunque AutoML distribuye las pruebas de ajuste de hiperparámetros entre los nodos de trabajo de un clúster, cada modelo se entrena en un único nodo de trabajo.
AutoML calcula automáticamente la memoria necesaria para cargar y entrenar el conjunto de datos, y muestrea el conjunto de datos si es necesario.
Versión de Databricks Runtime | Comportamiento de muestreo |
---|---|
9.1 ML LTS - 10.4 LTS ML | La fracción de muestreo es constante y no depende del tipo de nodo o memoria del clúster por nodo. |
11.x ML | La fracción de muestreo aumenta para los nodos de trabajo con más memoria por núcleo. Para aumentar el tamaño de la muestra: - Usar un tipo de instancia optimizada para memoria. - Ajuste spark.task.cpus en la configuración de Spark. El valor predeterminado es 1 y el valor máximo es el número de CPU en el nodo de trabajo. El valor máximo es el número de CPU en el nodo de trabajo. Al aumentar este valor, el tamaño de la muestra es mayor, pero se ejecutan menos pruebas en paralelo.Ejemplo: En una máquina con 4 núcleos y 64 GB de RAM: - Con spark.task.cpus=1 , se ejecutan cuatro pruebas por trabajo, cada una con 16 GB de RAM.- Con spark.task.cpus=4 , se ejecuta una prueba por trabajo, con todas las RAM de 64 GB. |
11.3 LTS ML y versiones posteriores | Si AutoML muestra el conjunto de datos, la fracción de muestreo se muestra en la pestaña Información general de la interfaz de usuario. |
12.2 ML LTS y versiones posteriores | AutoML puede controlar conjuntos de datos más grandes asignando más núcleos de CPU por tarea de entrenamiento. Aumente el tamaño de la muestra seleccionando una instancia con más memoria total. |
Para problemas de clasificación, AutoML usa el método sampleBy
PySpark para el muestreo estratificado para conservar la distribución de etiquetas de destino.
Para problemas de regresión, AutoML usa el método sample
PySpark.
Detección de tipos semánticos
Nota:
- AutoML no realiza la detección de tipos semánticos para las columnas que tienen especificados métodos de imputación personalizados.
Con Databricks Runtime 9.1 LTS ML y versiones posteriores, AutoML intenta detectar si las columnas tienen un tipo semántico diferente del tipo de datos Spark o pandas en el esquema de tabla. AutoML trata estas columnas como el tipo semántico detectado. Estas detecciones son el mejor esfuerzo y, a veces, pueden perder la existencia de tipos semánticos. También puede establecer manualmente el tipo semántico de una columna, o decirle a AutoML que no aplique la detección de tipos semánticos a una columna mediante anotaciones.
En concreto, AutoML realiza estos ajustes:
- Las columnas de cadena e entero que representan datos de fecha o marca de tiempo se tratan como un tipo de marca de tiempo.
- Las columnas de cadena que representan datos numéricos se tratan como un tipo numérico.
Con Databricks Runtime 10.1 ML y posteriores, AutoML también realiza estos ajustes:
- Las columnas numéricas que contienen Ids. de categorías se tratan como una característica de categorías.
- Las columnas de cadena que contienen texto en inglés se tratan como una característica de texto.
Anotaciones de tipos semánticos
Con Databricks Runtime 10.1 ML y versiones posteriores, puede controlar manualmente el tipo semántico asignado, colocando una anotación de tipo semántico en una columna. Para anotar manualmente el tipo semántico de una columna <column-name>
como <semantic-type>
, use la sintaxis siguiente:
metadata_dict = df.schema["<column-name>"].metadata
metadata_dict["spark.contentAnnotation.semanticType"] = "<semantic-type>"
df = df.withMetadata("<column-name>", metadata_dict)
<semantic-type>
puede ser uno de los siguientes:
categorical
: la columna contiene valores categóricos (por ejemplo, valores numéricos que deben tratarse como Ids.).numeric
: la columna contiene valores numéricos (por ejemplo, valores de cadena que se pueden analizar en números).datetime
: la columna contiene valores de marca de tiempo (valores de cadena, numéricos o de fecha, que se pueden convertir en marcas de tiempo).text
: la columna de cadena contiene texto en inglés.
Para deshabilitar la detección de tipos semánticos en una columna, use la anotación de palabra clave especial native
.