python - sklearn - ¿Cómo uso las etiquetas de cadena no enteros con SVM de scikit-learn? Pitón
svm python (2)
Esto no es tanto una pregunta de Python o Python, sino más un problema general con SVM.
Las instancias de datos en SVM se deben representar como vectores de escalares de tipo, generalmente, números reales. Por lo tanto, los atributos categóricos deben correlacionarse con algunos valores numéricos antes de que puedan incluirse en las SVM.
Algunos atributos categóricos se prestan más natural / lógicamente para ser mapeados en alguna escala (algunos "métricos" sueltos). Por ejemplo, un mapeo (1, 2, 3, 5) para un campo de Prioridad con valores de (''sin apuro'', ''entrega estándar'', ''urgente'' y ''más urgente'') puede tener sentido. Otro ejemplo puede ser con colores que se pueden mapear a 3 dimensiones, una para sus componentes rojo, verde, azul, etc.
Otros atributos no tienen una semántica que permita un mapeo lógico aproximado en una escala; a los diversos valores para estos atributos se les debe asignar un valor numérico arbitrario en una (o posiblemente varias) dimensiones del SVM. Entendiendo que si una SVM tiene muchas de estas dimensiones "no métricas" arbitrarias, puede ser menos eficiente clasificando adecuadamente elementos, porque los cálculos de distancia y la lógica de agrupación implícita para el funcionamiento de las SVM están menos relacionadas semánticamente.
Esta observación no significa que las SVM no se pueden utilizar cuando los elementos incluyen dimensiones no numéricas o no "métricas", pero sin duda es un recordatorio de que la selección de características y la asignación de características son parámetros muy sensibles de los clasificadores en general y SVM en particular .
En el caso particular del etiquetado POS ... me temo que estoy perplejo en este momento, sobre qué atributos del corpus etiquetado usar y sobre cómo asignarlos a valores numéricos. Sé que SVMTool puede producir marcadores de POS muy eficientes, usando SVM, y también varios artículos académicos describen taggers también basados en SVM. Sin embargo, estoy más familiarizado con los otros enfoques de etiquetado (por ejemplo, con HMM o máxima entropía).
Scikit-learn tiene módulos de python bastante fáciles de usar para el aprendizaje automático.
Estoy tratando de entrenar un etiquetador SVM para el procesamiento de lenguaje natural (NLP) donde mis etiquetas y datos de entrada son palabras y anotaciones. Por ejemplo, etiquetado de voz parcial, en lugar de usar datos dobles / enteros como tuplas de entrada [[1,2], [2,0]]
, mis tuplas se verán así [[''word'',''NOUN''], [''young'', ''adjective'']]
¿Alguien puede dar un ejemplo de cómo puedo usar el SVM con tuplas de cuerdas? el tutorial / documentación que se proporciona aquí es para entradas enteras / dobles. http://scikit-learn.org/stable/modules/svm.html
La mayoría de los algoritmos de aprendizaje automático procesan muestras de entrada que son vectores de flotantes de manera que una distancia pequeña (a menudo euclidiana) entre un par de muestras significa que las 2 muestras son similares de una manera que es relevante para el problema en cuestión.
Es responsabilidad del practicante de aprendizaje de máquina encontrar un buen conjunto de funciones de flotación para codificar. Esta codificación es específica del dominio, por lo tanto, no existe una forma general de construir esa representación a partir de los datos brutos que funcionarían en todos los dominios de la aplicación (varias tareas NLP, visión por computadora, análisis de registro de transacciones ...). Esta parte del trabajo de modelado de aprendizaje automático se llama extracción de características . Cuando se trata de una gran cantidad de trabajo manual, esto se conoce como ingeniería de características .
Ahora, para su problema específico, las etiquetas POS de una ventana de palabras alrededor de una palabra de interés en una oración (por ejemplo, para etiquetado de secuencia como la detección de entidad nombrada) pueden codificarse adecuadamente utilizando la clase de ayuda de extracción de característica de DictVectorizer de scikit-learn.