Codificación de clasificadores
Tengo algunas dudas con respecto a la codificación (no estoy familiarizado con tareas como estas) variables categóricas para poder usarlas como parámetros en un modelo como regresión logística o SVM. Mi conjunto de datos se parece al siguiente
Text Symbol Note Account Age Label
There is a red car ! red John 24 1
My bag was very expensive ? orange Luke 36 0
Where are my keys? @ red Red 58 1
I promise: I will never let you go! ... green Aoife 28 0
En el texto hay comentarios almacenados de usuarios en una comunidad; símbolo incluye el símbolo más utilizado por un usuario; La nota representa su nivel: el verde es más experimentado, el rojo es un nuevo ensamblador; Cuenta es el nombre de usuario. La etiqueta me da información sobre la confianza del usuario: si 0 el usuario no es falso; si uno, el usuario podría ser un posible bot.
Me gustaría clasificar a los nuevos usuarios según la información actual (consulte las columnas anteriores). Mi conjunto de datos incluye más de 1000 filas y 400 usuarios. Dado que para usar clasificadores necesito codificar campos categóricos, he intentado hacer lo siguiente, usando MultiColumnLabelEncoderen sklearn:
MultiColumnLabelEncoder(columns = ['Text', 'Symbol', 'Note', 'Account']).fit_transform(df)
donde df es mi marco de datos. Sin embargo, entendí que también debería ser preferible un codificador único. También incluí Cuenta, ya que podría haber más comentarios de la misma cuenta, por lo que si clasifico una cuenta como falsa y recibo un nuevo comentario de la misma cuenta, esta cuenta podría detectarse fácilmente como falsa. El objetivo, como mencioné anteriormente, sería clasificar, con cierta precisión, nuevos elementos de un conjunto de prueba, en base a la información proporcionada (símbolo, nota, edad, textos), es decir, buscando una posible correlación entre estas variables que puede permitirme decir que una cuenta nueva es falsa (1) o no (0).
El problema, como puede ver, está relacionado con los clasificadores donde los parámetros no solo son numéricos, sino también categóricos.
Para el preprocesamiento de datos (eliminación de palabras vacías y limpieza de datos), he usado paquetes Python de nltk; con respecto a la extracción de características (este debería ser un punto clave ya que está vinculado al siguiente paso, es decir, usar un clasificador para predecir la clase - 1 o 0), he encontrado dificultades para comprender qué resultado debo esperar de la codificación para poder ser capaz de usar la información anterior como entradas en mi modelo (donde el objetivo se llama etiqueta y es un valor binario). Estoy usando como clasificador regresión logística, pero también SVM.
Mi resultado esperado, en el caso del usuario X con 16 años, símbolo #, nota Maravilloso y nota roja (nuevo usuario) sería una clasificación como falso con un cierto porcentaje.
Agradecería que alguien me explicara, paso a paso, la forma de transformar mi conjunto de datos en un conjunto de datos cuyas variables puedo usar dentro de una regresión logística para determinar la etiqueta (falsa o no falsa) de nuevos usuarios.
Respuestas
Tendrá que utilizar una combinación de procesamiento de texto y una codificación en caliente. La columna de texto no debe tratarse como una codificación única, ya que intentará crear una nueva variable para cada oración única en el conjunto de datos, lo que será mucho (y no muy útil para el aprendizaje). El vectorizador de texto resumirá la columna de texto según el tipo de palabras / tokens que aparecen en ella.
Por lo tanto, debe usar un vectorizador de texto para procesar solo la columna de texto primero. Esto le dará un marco de datos (digamos A). Este marco de datos tendrá columnas correspondientes a tokens / palabras en el conjunto de datos. Entonces, si el vectorizador de texto recoge 100 palabras únicas, tendrá un marco de datos de tamaño 1000x100. Tenga en cuenta que estas 100 columnas han sido generadas solo por el vectorizador de texto.
Para símbolos y notas, puede usar la codificación one-hot, que le dará otro marco de datos (por ejemplo, B). Luego, debe unirse a A y B en la clave común para obtener su marco de datos final si ingresa. La clave común aquí será el ID de fila (aunque lea el siguiente comentario sobre la agregación de datos a nivel de usuario).
¿No está claro si la columna de nombre de usuario (Cuenta) es única en los datos? Si hay 1000 filas pero solo 400 usuarios, eso significa que puede haber más de 1 fila por usuario. En ese caso, puede considerar agregar los datos a nivel de usuario (para la columna de texto, puede simplemente concanear todas las cadenas para el mismo usuario).