Pregunta ¿Qué algoritmos usar para una clasificación de clase?


Tengo más de 15000 documentos de texto de un tema específico. Me gustaría crear un modelo de lenguaje basado en el anterior para poder presentar a este modelo nuevos documentos de texto aleatorios de diversos temas y los algoritmos indican si el nuevo documento es del mismo tema.

Probé sklearn.naive_bayes.MultinomialNB, sklearn.svm.classes.LinearSVC y otros, sin embargo tengo el siguiente problema:

Estos algoritmos requieren datos de capacitación con más de una etiqueta o categoría y solo tengo páginas web que cubren un tema específico. Los otros documentos no están etiquetados y tienen muchos temas diferentes.

Agradecería cualquier orientación sobre cómo entrenar un modelo con una sola etiqueta o cómo proceder en general. Lo que tengo hasta ahora es:

c = MultinomialNB()
c.fit(X_train, y_train)
c.predict(X_test)

Muchas gracias.


5
2017-10-23 20:40


origen


Respuestas:


Lo que estás buscando es el OneClassSvm. Para más información puede consultar la documentación correspondiente. en este enlace.


8
2017-10-24 14:23



Hay otro clasificador disponible en TextBlob módulo llamado PositiveNaiveBayesClassifier. Para citar de su documentación:

Una variante del clasificador Naive Bayes que realiza una clasificación binaria con conjuntos de entrenamiento parcialmente etiquetados, es decir, cuando solo una clase está etiquetada y la otra no. Suponiendo una distribución previa en las dos etiquetas, usa el conjunto sin etiqueta para estimar las frecuencias de las características.

Código de uso:

>>> from text.classifiers import PositiveNaiveBayesClassifier
>>> sports_sentences = ['The team dominated the game',
                        'They lost the ball',
                        'The game was intense',
                        'The goalkeeper catched the ball',
                        'The other team controlled the ball']
>>> various_sentences = ['The President did not comment',
                         'I lost the keys',
                         'The team won the game',
                         'Sara has two kids',
                         'The ball went off the court',
                         'They had the ball for the whole game',
                         'The show is over']
>>> classifier = PositiveNaiveBayesClassifier(positive_set=sports_sentences,
                                unlabeled_set=various_sentences)
>>> classifier.classify("My team lost the game")
True
>>> classifier.classify("And now for something completely different.")
False

3
2018-02-10 05:39