¿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:
- Huge
- Mediana
- Pequeño
Primero asigna un entero único para cada valor único de su variable categórica.
- Huge = 0
- Media = 1
- 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:
- Dividir el Conjunto de Datos:
- Crear el Modelo de Red Neuronal:
- Entrenar el Modelo:
- Evaluar el Modelo:
- Predicciones:
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]).TCrea 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