[PYTHON] Fordern Sie die Textklassifizierung von Naive Bayes mit sklearn heraus

In Kapitel 6 von Praktisches maschinelles Lernsystem gab es ein Beispiel für eine Textklassifizierung von Naive Bayes, daher werde ich mich selbst herausfordern.

Dinge die zu tun sind

sklearn-Datensatz 20newsgroups [sklearn.naive_bayes.MultinomialNB](http: /scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html) Zum Kategorisieren verwenden.

  1. Verwenden Sie CountVectorizer, um ein Dokument in eine Worthäufigkeitsmatrix zu konvertieren.
  2. Verwenden Sie MultinomialNB, um einen Klassifikator für naive Buchten zu trainieren.
  3. Überprüfen Sie mit Testdaten

Es wird der Fluss sein.

Implementierung

Bis auf die Stoppworteinstellung bleibt alles auf seiner Standardeinstellung.

import numpy as np
from sklearn.datasets import fetch_20newsgroups
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer
import nltk

def stopwords():
    symbols = ["'", '"', '`', '.', ',', '-', '!', '?', ':', ';', '(', ')', '*', '--', '\\']
    stopwords = nltk.corpus.stopwords.words('english')
    return stopwords + symbols

newsgroups_train = fetch_20newsgroups(subset='train', remove=('headers', 'footers', 'quotes'))
newsgroups_test  = fetch_20newsgroups(subset='test', remove=('headers', 'footers', 'quotes'))

vectorizer = CountVectorizer(stop_words=stopwords())
vectorizer.fit(newsgroups_train.data)

# Train
X = vectorizer.transform(newsgroups_train.data)
y = newsgroups_train.target
print(X.shape)

clf = MultinomialNB()
clf.fit(X, y)
print(clf.score(X,y))

# Test
X_test = vectorizer.transform(newsgroups_test.data) 
y_test = newsgroups_test.target

print(clf.score(X_test, y_test))

Ergebnis

Die korrekte Antwortrate für die Testdaten betrug 62%. (81% für Trainingsdaten)

Ich fand heraus, dass die Verwendung von sklearn das Klassifizieren von Texten mit dem Naive Bayes-Klassifikator erleichtert. Da die korrekte Antwortrate jedoch 62% beträgt, erscheint es notwendig, verschiedene Verarbeitungen in natürlicher Sprache wie TfIdf und Stemming anzuwenden, um die Genauigkeit zu verbessern.

Nachtrag (30.03.2016)

Ich habe zu TfidVectorizer gewechselt und versucht, mit GridSearchCV den optimalen Parameter zu finden. Der Prozentsatz der richtigen Antworten auf Testdaten stieg leicht auf 66%.

import numpy as np
from sklearn.datasets import fetch_20newsgroups
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.grid_search import GridSearchCV
from sklearn.pipeline import Pipeline
import nltk

def stopwords():
    symbols = ["'", '"', '`', '.', ',', '-', '!', '?', ':', ';', '(', ')', '*', '--', '\\']
    stopwords = nltk.corpus.stopwords.words('english')
    return stopwords + symbols

newsgroups_train = fetch_20newsgroups(subset='train', remove=('headers', 'footers', 'quotes'))
newsgroups_test  = fetch_20newsgroups(subset='test', remove=('headers', 'footers', 'quotes'))

# Pipeline
pipeline = Pipeline([('vectorizer', TfidfVectorizer()), ('multinomial_nb', MultinomialNB())])
params = {
    'vectorizer__max_df': [1.0, 0.99],
    'vectorizer__ngram_range': [(1,1), (1, 2)],
    'vectorizer__stop_words' : [stopwords()],
}
clf = GridSearchCV(pipeline, params)

# Train
X = newsgroups_train.data
y = newsgroups_train.target
clf.fit(X,y)
print(clf.score(X, y))

# Test
X_test = newsgroups_test.data
y_test = newsgroups_test.target
print(clf.score(X_test, y_test))

Recommended Posts

Fordern Sie die Textklassifizierung von Naive Bayes mit sklearn heraus
Textfilterung mit naiven Buchten von sklearn
Naive Buchten (Mehrklassenklassifikation)
Unüberwachte Textklassifizierung mit Doc2Vec und k-means
Multi-Label-Klassifizierung nach Random Forest mit Scikit-Learn
Dokumentklassifizierung mit toch Text von PyTorch
Eine Ära, in der eine Textklassifizierung durch BERT mit 3 Codezeilen möglich ist
Ich habe versucht, Tundele mit Naive Bays zu beurteilen
Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras heraus. 6-Versuchen Sie, die von Ihnen erstellten Bilder vorzuverarbeiten und zu klassifizieren.
Fordern Sie die Hauptkomponentenanalyse von Textdaten mit Python heraus
Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras 3 heraus ~ Visualisieren Sie MNIST-Daten ~