Esta es una pregunta acerca de regresión lineal con ngrams, el uso de Tf-IDF (plazo de frecuencia inversa de documento de frecuencia). Para hacer esto, yo estoy usando numpy matrices dispersas y sklearn para la regresión lineal.

Tengo 53 casos y más de 6000 características cuando se utiliza unigrams. Las predicciones se basan en la validación cruzada usando LeaveOneOut.

Cuando puedo crear una tf-idf matriz dispersa de sólo unigram partituras, me vaya un poco mejor que las predicciones que cuando me cree una tf-idf matriz dispersa de unigram+bigramas puntuaciones. Las columnas más puedo añadir a la matriz (columnas para trigrama, quadgram, quintgrams, etc.), menos exacto de la regresión de predicción.

Esto es normal? ¿Cómo es esto posible? Yo habría pensado que el más funciones, mejor.

¿Cuál es su tarea (por ejemplo, clasificación de documentos) y qué tipo de/la cantidad de datos que tiene usted?

OriginalEl autor Zach | 2012-09-03

2 Comentarios

  1. 11

    No es común que los dígrafos para realizar peor que unigrams, pero hay situaciones en que puede suceder. En particular, la adición de características adicionales que pueden conducir a sobreajuste. Tf-idf es raro para aliviar esta situación, como el tiempo de n-gramas será más raro, que conduce a la mayor de las fdi valores.

    No estoy seguro de qué tipo de variable que se está tratando de predecir, y nunca he hecho la regresión en el texto, pero he aquí algunos resultados comparables de la literatura para pensar:

    • Al azar en la generación de texto con los pequeños (pero no trivial) de conjuntos de entrenamiento, de 7 gramos tienden a reconstruir el texto de entrada, casi palabra por palabra, es decir, la causa completa overfit, mientras que los trigramas son más propensos a generar «nuevos» pero sigue siendo algo gramaticales/reconocible de texto (ver Jurafsky & Martin; no puede recordar el número del capítulo y no tengo mi copia a mano).
    • En la clasificación de un estilo de PNL tareas llevadas a cabo con el kernel de máquinas, cuadrática de los núcleos tienden a comportarse mejor que cúbicos por las que, a menudo overfit en el conjunto de entrenamiento. Tenga en cuenta que unigram+bigramas características puede ser considerado como un subconjunto de la cuadrática núcleo del espacio de características, y {1,2,3}-gramos de la cúbico kernel.

    Exactamente lo que está sucediendo depende del conjunto de entrenamiento; simplemente puede ser demasiado pequeño.

    Mis resultados son obtenidos por Dejar Uno Fuera de la validación cruzada. Tengo 53 muestras y cada muestra se lleva a cabo del conjunto de entrenamiento, antes de que esté capacitado. No esta en sí misma, evitar el exceso de montaje?
    no; la validación cruzada es sólo un requisito mínimo para cualquier tipo de evaluación cuando no se cuenta con la validación independiente o conjunto de pruebas. 53 muestras es un es pequeño conjunto de entrenamiento. También, acabo de ver tus mensajes en el scikit-learn lista de correo y he leído que estás haciendo en el análisis de sentimiento. En ese caso, la caída de tf-idf y su uso en crudo, frecuencias, sublinear tf o término booleano ocurrencias. fdi subestima la importancia de los sentimientos en palabras, porque es diseñado para encontrar tópico similitud, lo cual es indicado por el más palabras en el texto.
    53 muestras son muy pocos los textos para la clasificación. En lugar de tratar de modificar la extracción de características y el algoritmo de aprendizaje se debe invertir mejor el tiempo en el etiquetado de más datos (semi-automáticamente, tal vez el uso de fuentes externas de datos).
    anotar al menos 100 * n_classes (por ejemplo, 200 para la clasificación binaria). A continuación, calcular la validación cruzada puntuación en 50%, 60%, 70%, 80%, 90% y el 100% de sus datos y considerar la prueba de la curva de error: usted debe observar algunos de los rendimientos decrecientes, considerando la pendiente de cada segmento. El compromiso entre la precisión de la mejora y la anotación costo es problema específico, pero esta curva se debe dar a la herramienta para hacer una decisión informada (es decir, no completamente en la oscuridad :).
    Por otro lado, el aprendizaje de máquina (sin supervisión de aprendizaje, aprendizaje semi-supervisado y aprendizaje activo) podría ayudar a reducir el costo de etiquetado de las muestras nuevas. Sin embargo no tengo listo para usar scikit-learn activo de aprendizaje de bucle.

    OriginalEl autor Fred Foo

  2. 8

    Como larsmans dijo, añadiendo más variables /funciones hace que sea más fácil para el modelo de overfit por lo tanto, pierden en la exactitud de la prueba. En la rama principal de la scikit-learn ahora hay una min_df parámetro cut-off cualquier cuentan con menos de esa cantidad de ocurrencias. Por lo tanto min_df==2 a min_df==5 puede ayudarle a deshacerse de espurias bi-gramas.

    Alternativamente, usted puede usar la L1 o L1 + L2 penalizado de regresión lineal (o clasificación) utilizando cualquiera de las siguientes clases:

    • sklearn.linear_model.Lasso (regresión)
    • sklearn.linear_model.ElasticNet (regresión)
    • sklearn.linear_model.SGDRegressor (regresión) con pena == ‘elastic_net’ o ‘l1’
    • sklearn.linear_model.SGDClassifier (clasificación) con pena == ‘elastic_net’ o ‘l1’

    Esto hará que sea posible para ignorar espurias características y conducir a una escasa modelo con muchas cero pesos para ruidosos características. La cuadrícula de la Búsqueda de la regularización de los parámetros van a ser muy importantes, aunque.

    También puede intentar univariante de la selección de características tales como el hecho de que el clasificación de textos, ejemplo de scikit-learn (verificación de la SelectKBest y chi2 utilidades.

    chi2 la selección de características en realidad no trabajo para la regresión, sin embargo. Podría ser hackeado para trabajar con binned de regresión de los resultados.
    Cuando dices min_df es en la Rama Master, ¿te refieres a la versión de desarrollo más allá 0.11?
    Sí la rama master oficial de la repo de github: github.com/scikit-learn/scikit-learn
    Nota: el min_df es ahora parte de las versiones publicadas de scikit-learn (0,14 y posterior).

    OriginalEl autor ogrisel

Dejar respuesta

Please enter your comment!
Please enter your name here