Pregunta

Solo por curiosidad, es generalmente una buena idea para reducir la dimensión del conjunto de entrenamiento antes de usarla para entrenar clasificador SVM?

Tengo una colección de documentos, cada uno de ellos está representado por un vector con la tf-idf peso calculado por scikit-learn tfidf_transformer.El número de términos (característica?) está cerca de 60k, y con mi conjunto de entrenamiento que consiste de alrededor de 2,5 mil de documentos, hace que el proceso de entrenamiento a seguir para siempre.

Además de tomar para siempre a entrenar, la clasificación no es preciso más probablemente debido a que el modelo equivocado.Sólo para tener una idea de lo que estoy tratando, traté de encontrar una manera de visualizar los datos de alguna manera.Y se me descompuso el documento de la matriz en (m, 2) de la matriz utilizando SVD con scikit-learn (quería probar otros métodos, pero todos ellos se estrelló a mitad de camino).

Así que esto es lo que la visualización se parece a

Result of SVD

Por lo tanto, es generalmente una buena práctica para reducir la dimensión y, a continuación, sólo procederá con la SVM?También en este caso, ¿qué puedo hacer para mejorar la precisión de la clasificación?Estoy tratando de usar sklearn.svm.SVC y kernel='poly', y degree=3 y está teniendo un tiempo muy largo para completar.

¿Fue útil?

Solución

Recomendaría pasar más tiempo pensando en la selección de características y la representación para su SVM que preocuparse por la cantidad de dimensiones en su modelo. En términos generales, la SVM tiende a ser muy robusta a las características poco informativas (por ejemplo, ver Joachims, 1997, o Joachims, 1999 para una buena descripción general). En mi experiencia, SVM a menudo no se beneficia tanto de pasar tiempo en la selección de características como otros algoritmos, como los bayes ingenuos. Las mejores ganancias que he visto con SVM tienden a provenir de tratar de codificar su propio conocimiento experto sobre el dominio de clasificación de una manera que es computacionalmente accesible. Digamos, por ejemplo, que está clasificando publicaciones sobre si contienen información sobre las interacciones proteína-proteína. Algo que se pierde en la bolsa de palabras y enfoques de vectorización de TFIDF es el concepto de proximidad: es más probable que se encuentren dos palabras relacionadas con proteínas que ocurren cerca entre sí en un documento en documentos relacionados con la interacción proteína-proteína. Esto a veces se puede lograr usando el modelado de $ N $ -gram, pero hay mejores alternativas que solo podrá usar si piensa en las características de los tipos de documentos que está tratando de identificar.

Si aún desea intentar hacer la selección de funciones, Recomendaría $ chi^{2} $ Selección de características (Chi-cuadrado). Para hacer esto, clasifica sus características con respecto al objetivo

begin {ecuación} chi^{2} ( textbf {d}, t, c) = sum_ {e_ {t} in {0,1}} sum_ {e_ {c} in {0, 1}} frac {(n_ {e_ {t} e_ {c}}-e_ {e_ {t} e_ {c}})^{2}} {e_ {e_ {t}} e_ {c}},, end {ecuación} donde $ n $ es la frecuencia observada de un término en $ textbf {d} $, $ e $ es su frecuencia esperada y $ t $ y $ c $ denotan término y clase, respectivamente. Puedes Calcule fácilmente esto en sklearn, a menos que desee la experiencia educativa de codificarlo usted mismo $ ddot smile $

Otros consejos

Mientras realiza PCA en sus vectores TFIDF o derivado o eliminar las palabras poco frecuentes puede reducir la dimensionalidad significativamente, es posible que desee intentar modelado de temas.

Si bien su problema inicial de crear temas y asignar temas a los documentos permanecerá en un espacio de alto dimenio, la parte supervisada estará en el espacio de los temas.

Hay muchas implementaciones rápidas de LDA y modelos de temas similares por ahí.

SVM en muchos de formación de los vectores tomar un tiempo muy largo, y una gran cantidad de memoria[O(n^3) y tiempo de O(n^2) espacio, n es el no.de formación vector].Usted podría utilizar una SVM biblioteca con la velocidad de la GPU, que podría ayudar un poco.Como se ha mencionado en anteriores mensajes, características no importa mucho para SVMs.

¿Cuál es su valor de C?Para algunos valores de C, se requiere más tiempo.Usted podría tratar de optimización con un par de vectores y la rejilla de búsqueda.

Las redes neuronales aprenden bien a partir de grandes conjuntos de datos, junto con la gestión por resultados debe dar buenos resultados.O usted podría tratar de Azar Bosques de Árboles de Decisión con el Embolsado/XGBoost u otros conjunto de métodos.Son sorprendentemente buenos y pueden ser súper rápido (en relación con SVM).

También, esto puede ser de importancia, pero no tengo suficiente reputación para comentar - ¿qué tipo de visualización es este - PCA?Si esto no te da una buena idea, se podría intentar MDS, tal vez?

Licenciado bajo: CC-BY-SA con atribución
scroll top