¿Cómo uso columnas categóricas en Deep Learning?

Estoy usando este conjunto de datos de la agricultura de cultivos. Para utilizarlo para crear una red neuronal, preprocesé los datos usando MinMaxScalar, esto escalaría los datos entre 0 y 1. Pero mi conjunto de datos también consiste en columnas categóricas, debido a las cuales tuve un error durante el procesamiento previo. Así que intenté encodificar las columnas categóricas usando OneHotEncoder y LabelEncoder pero no entiendo qué hacer con él entonces.

Mi objetivo es predecir "Crop_Damage".

¿Cómo procederé?

Enlace al conjunto de datos - https://www.kaggle.com/aniketng21600/crop-damage-information-in-in-in

Pregunta hecha hace 3 años, 4 meses, 25 días - Por binaryblossom


4 Respuestas:

  • Tienes varias opciones.

    Usted puede utilizar una codificación caliente y pasar su variable categórica a la red como red de un solo toque.

    Usted puede obtener inspiración de NLP y su procesamiento. Unos vectores calientes son escasos y pueden ser realmente enormes (depende de valores únicos de su variable categórica). Por favor, mire las técnicas Word2vec(cat2vec) o GloVe. Ambos tienen como objetivo crear desde el elemento categórico, vector numérico no esparcido(significante).

    Aparte de estos dos keras ofrecen otra manera de obtener este vector numérico. Se llama capa embedida. Por ejemplo, consideremos que usted tiene daño de cosecha variable con estos valores:

    1. Huge
    2. Mediana
    3. Pequeño

    Primero asigna un entero único para cada valor único de su variable categórica.

    1. Huge = 0
    2. Media = 1
    3. Little= 2

    Que pases valores categóricos traducidos (integers únicos) a capa emebeded. La capa embedida toma en secuencia de entrada de enteros únicos y produce secuencia de vectores densos. Los valores de estos vectores son primero al azar, pero durante el entrenamiento se optimizan como pesos regulares de red neuronal. Así podemos decir que durante la formación de la red neuronal construir representación vectorial de categorías según función de pérdida.

    Para mí es la capa embedida la forma más fácil de obtener suficiente representación vectorial de variables categóricas. Pero puedes probar primero con uno caliente si la precisión te satisface.

    Respondida el Dec 21, 2020 a las 07:56 - por algorithmwizard

    Votos positivos: 0 | Votos negativos: 0

  • Aquí hay un encoder caliente. df es el marco de datos con el que trabaja, columna es el nombre de la columna que quieres codificar. prefijo es una cadena que se adjunta a los nombres de columna creados por pandas dummies. Lo que pasa es que las nuevas columnas de muñeco se crean y anexado al marco de datos como nuevas columnas. Luego se elimina la columna original. Hay una excelente serie de videos sobre marcos de datos de codificación y otros temas en Youtube Aquí.

    def onehot_encode(df, column, prefix):
        df = df.copy()
        dummies = pd.get_dummies(df[column], prefix=prefix)
        df = pd.concat([df, dummies], axis=1)
        df = df.drop(column, axis=1)
        return df
    

    Respondida el Dec 21, 2020 a las 08:04 - por compilerhero1251

    Votos positivos: 0 | Votos negativos: 0

  • Para utilizar columnas categóricas en Deep Learning, hay algunos pasos que debes seguir luego de aplicar la codificación adecuada a tus datos. A continuación, te indico algunos pasos que puedes seguir:

    • Codificación de Columnas Categóricas:
    - Utiliza OneHotEncoder o LabelEncoder para codificar tus columnas categóricas. OneHotEncoder crea una nueva columna para cada categoría distinta en tus datos, mientras que LabelEncoder asigna un número a cada categoría.

    • Dividir el Conjunto de Datos:
    - Divide tu conjunto de datos en conjuntos de entrenamiento, validación y prueba. Esto te permitirá evaluar el rendimiento de tu modelo neural en datos no vistos.

    • Crear el Modelo de Red Neuronal:
    - Define tu modelo de red neuronal en TensorFlow o Keras. Asegúrate de incluir capas de entrada para todas las columnas codificadas, así como capas ocultas y de salida para tus predicciones.

    • Entrenar el Modelo:
    - Entrena tu modelo de red neuronal en el conjunto de datos de entrenamiento. Ajusta los hiperparámetros como el número de épocas, tamaño del lote, tasa de aprendizaje, etc.

    • Evaluar el Modelo:
    - Evalúa el rendimiento de tu modelo en el conjunto de datos de validación para ajustar y mejorar su rendimiento.

    • Predicciones:
    - Una vez que estés satisfecho con el rendimiento de tu modelo, puedes usarlo para hacer predicciones en el conjunto de datos de prueba y evaluar su rendimiento final.

    Recuerda adaptar estos pasos a tu conjunto de datos y problema específico. Además, es importante tener en cuenta que el procesamiento previo y el modelado en Deep Learning pueden variar según la naturaleza de tus datos y la complejidad del problema que estás abordando.

    Respondida el Dec 22, 2020 a las 07:57 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Pasos para usar columnas categóricas en Deep Learning:

    1. Codificación de columnas categóricas:

    One-Hot Encoding: Crea una nueva columna para cada valor único en la columna categórica. Label Encoding: Asigna un número entero único a cada valor único.

    2. Preprocesamiento:

    Escalar datos numéricos: Usa MinMaxScaler o StandardScaler para escalar los datos numéricos entre 0 y 1 (o un rango específico). Normalizar datos categóricos: Para datos codificados por One-Hot, divide cada columna por el número de valores únicos en la columna categórica original.

    3. Creación del modelo:

    Modelo de entrada: Para datos codificados por One-Hot, usa una capa de entrada de dimensión igual al número de columnas codificadas. Para datos codificados por Label, usa una capa de entrada de dimensión igual al número de valores únicos en la columna categórica original. Capa de inserción: Agrega una capa de inserción después de la capa de entrada para los datos categóricos. Esta capa convierte los enteros de codificación de etiquetas en vectores de representación densos.

    Ejemplo:

    python
    import numpy as np
    import pandas as pd
    import tensorflow as tf
    
    

    Carga los datos

    data = pd.read_csv('crop_damage.csv')

    Codifica las columnas categóricas usando One-Hot Encoding

    data = pd.get_dummies(data, columns=['Crop_Type', 'Soil_Type'])

    Preprocesa los datos

    data_num = data.select_dtypes(include=[np.number]).values data_num = MinMaxScaler().fit_transform(data_num) data_cat = data.select_dtypes(include=[np.object]).values data_cat = np.array([i / i.max() for i in data_cat.T]).T

    Crea el modelo

    inputs = tf.keras.Input(shape=(data_num.shape[1],)) embedding = tf.keras.layers.Embedding(data_cat.shape[1], 16)(data_cat) x = tf.keras.layers.concatenate([inputs, embedding]) x = tf.keras.layers.Dense(64, activation='relu')(x) output = tf.keras.layers.Dense(1, activation='sigmoid')(x) model = tf.keras.Model(inputs, output)

    Compila y entrena el modelo

    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) model.fit([data_num, data_cat], y, epochs=10)

    Nota:

    Los datos categóricos deben normalizarse para evitar que dominen los datos numéricos durante el entrenamiento. El tamaño de inserción para la capa de inserción debe seleccionarse cuidadosamente en función de la complejidad de los datos categóricos. Considera usar modelos específicos como Redes Neuronales Convolucionales (CNN) o Redes Neuronales Recurrentes (RNN) para manejar datos con estructura secuencial o espacial, respectivamente.

    Respondida el Dec 22, 2020 a las 08:03 - por Gemini

    Votos positivos: 0 | Votos negativos: 0