Japanische Sprachverarbeitung durch Python3 (5) Ensemble-Lernen verschiedener Modelle durch Voting Classifier

Was ist Ensemble-Lernen?

Wenn es mehrere Klassifikatoren mit hoher Genauigkeit gibt, um einen bestimmten Satz in mehrere Klassen zu klassifizieren, wie z. B. "Emotionsanalyse" in der Verarbeitung natürlicher Sprache, ist es möglich, ein stärkeres Modell zu erstellen, indem diese beim Lernen von Ensembles kombiniert werden. Es gibt auch.

Ensemble lernen Ein Verfahren zum Konstruieren eines hochpräzisen Lernenden durch Kombinieren eines Prädiktors, der eine zufällige Lösung ausgibt, dh eines schwachen Lernenden, der mit höherer Genauigkeit vorhersagen kann als ein Prädiktor mit der schlechtesten Vorhersagegenauigkeit. Techniken wie Absacken und Boosten sind bekannt. ([Toki no Mori Wiki Ensemble Learning](http://ibisforest.org/index.php?%E3%82%A2%E3%83%B3%E3%82%B5%E3%83%B3%E3%83] % 96% E3% 83% AB% E5% AD% A6% E7% BF% 92))

In Wirklichkeit scheint es besser zu sein, wenn mehrere Experten politische Vorschläge diskutieren, als wenn ein Experte Ratschläge zu Richtlinien gibt. Grob gesagt ist der Experte hier ein Lernender (zufällige Wald- oder Unterstützungsvektormaschine), und die Kombination der Ergebnisse (vorhergesagten Werte), die von mehreren Lernenden erhalten wurden, ist Ensemble-Lernen. Random Forest selbst wird übrigens als Ensemble-Lernender bezeichnet, da Random Forest den vorhergesagten Wert mehrheitlich aus den Ergebnissen mehrerer Entscheidungsbäume ermittelt. Dieses Mal werde ich den Voting Classifier untersuchen, der schnell mehrere Modelle mit hoher Genauigkeit kombinieren kann, die konzeptionell unterschiedlich sind.

Was ist ein Abstimmungsklassifikator?

Eine Klasse in sklearn.ensemble, die in scikit-learn v0.17 implementiert ist.

The idea behind the voting classifier implementation is to combine conceptually different machine learning classifiers and use a majority vote or the average predicted probabilities (soft vote) to predict the class labels. Such a classifier can be useful for a set of equally well performing model in order to balance out their individual weaknesses.

Der Abstimmungsklassifikator bestimmt die Ergebnisse, die von verschiedenen Lerntypen (z. B. Random Forest, Logistic Regression und Gausian NB (naiver Klassifikator)) erzielt werden, die bereits einen gewissen Grad an Genauigkeit im Mehrheits- oder Wahrscheinlichkeitsdurchschnitt aufweisen. Das Konzept selbst ist sehr einfach, aber einfach zu bedienen und überraschend leistungsfähig.

Hard Vote Eine Methode zur Übernahme des Etiketts, die von der Mehrheit der Etiketten festgelegt wurde, die bei Vorhersagen mit mehreren Modellen vorhergesagt wurden. Wenn für einen bestimmten Eingang X jeder der drei Lernenden eine andere Entscheidung trifft als "dies ist 1" und "dies ist 2", wird hier die Mehrheit "1" genommen und als X-> 1 klassifiziert. Getan werden. Lernender 1-> Klasse 1 Lernende 2-> Klasse 1 Lernende 3-> Klasse 2

Weak Vote Dies gewichtet die Wahrscheinlichkeit, dass jeder Lernende vorhersagt, in einer Klasse zu sein, und die Summe der Gewichte ergibt das Etikett mit der höchsten durchschnittlichen Wahrscheinlichkeit. Einzelheiten finden Sie im offiziellen Beispiel. 1.11.5.2. Weighted Average Probabilities (Soft Voting)

Seien Sie vorsichtig mit dem Voting Classifier

Eine Sache, die Sie beachten sollten, ist, dass ein ** Modell mit gleicher Leistung ** eine Gefahr darstellt. Wenn es Modelle gibt, die hier nicht gut funktionieren, selbst wenn Sie abstimmen, verbessert sich das Ergebnis möglicherweise nicht. Why is my VotingClassifier accuracy less than my individual classifier?

Eigentlich verwenden

Wie Sie in der offiziellen Dokumentation sehen können, stimme ich vorerst mit dem Voting Classifier hart über den Iris-Datensatz ab.

voting_classifier.py


from sklearn import datasets
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import VotingClassifier

def executre_voting_classifier():
    #Laden Sie den Iris-Datensatz
    iris = datasets.load_iris()
    X = iris.data[:, [0,2]]
    y = iris.target

    #Stellen Sie den Klassifikator ein. Hier verwenden wir logistische Regression, zufälligen Waldklassifikator und Gaußsche naive Basis.
    clf1 = LogisticRegression(random_state=1)
    clf2 = RandomForestClassifier(random_state=1)
    clf3 = GaussianNB()

    #Erstellen Sie einen Ensemble-Lernenden. Wählen='hard'Stellen Sie den Wert ein und entscheiden Sie ihn mit einfacher Mehrheit.
    eclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('gnb', clf3)], voting='hard')

    for clf, label in zip([clf1, clf2, clf3, eclf], ['Logistic Regression', 'Random Forest', 'naive Bayes', 'Ensemble']):
        scores = cross_val_score(clf, X, y, cv=5, scoring='accuracy')
        print("Accuracy: %0.2f (+/- %0.2f) [%s]" % (scores.mean(), scores.std(), label))

Ausgabeergebnis:
    Accuracy: 0.92 (+/- 0.03) [Logistic Regression]
    Accuracy: 0.91 (+/- 0.05) [Random Forest]
    Accuracy: 0.91 (+/- 0.06) [naive Bayes]
    Accuracy: 0.93 (+/- 0.06) [Ensemble]

Sicher (subtil) verbessert. Sie können Modelle einfach mit mehreren Parametern kombinieren und eine Rastersuche für diese Parameter durchführen.

ensemble.py


clf1 = SVC(kernel='rbf', random_state=0, gamma=0.3, C=5 ,class_weight='balanced')
clf2 = LogisticRegression(C=5, random_state=0, class_weight='balanced')
clf3 = RandomForestClassifier(criterion='entropy', n_estimators=250, random_state = 1, max_depth = 20, n_jobs=2, class_weight='balanced')

eclf = VotingClassifier(estimators=[('svm', clf1), ('lr', clf2), ('rfc', clf3)], voting='hard')
    eclf.fit(X_train, y_train)

So scheint es zu Zeiten effektiv zu sein, in denen "es einige Modelle gibt, die gut zu kombinieren scheinen, aber ich frage mich, ob es eine einfache Möglichkeit gibt, sie zu kombinieren."

Recommended Posts

Japanische Sprachverarbeitung durch Python3 (5) Ensemble-Lernen verschiedener Modelle durch Voting Classifier
[Sprachverarbeitung 100 Schläge 2020] Zusammenfassung der Antwortbeispiele von Python
100 Sprachverarbeitung Knock Kapitel 1 von Python
Japanische Verarbeitung natürlicher Sprache mit Python3 (4) Emotionsanalyse durch logistische Regression
[Lernnotiz] Grundlagen des Unterrichts mit Python
Graustufen durch Matrix-Reinventor der Python-Bildverarbeitung-
[Python] [Verarbeitung natürlicher Sprache] Ich habe Deep Learning ausprobiert (auf Japanisch von Grund auf neu erstellt)
Python: Tiefes Lernen in der Verarbeitung natürlicher Sprache: Grundlagen
Python: Deep Learning in der Verarbeitung natürlicher Sprache: Implementierung eines Antwortsatzauswahlsystems
Bildverarbeitung durch Matrix Basics & Contents-Reinventor der Python-Bildverarbeitung-
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Lernen Sie mit "Google Colaboratory" ganz einfach 100 Sprachverarbeitungsklopfen 2020.
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Python: Verarbeitung natürlicher Sprache
Kommunikationsverarbeitung durch Python
Verschiedene Verarbeitung von Python
[Python] Versuchen Sie, Ramen-Shops durch Verarbeitung natürlicher Sprache zu klassifizieren
100 Sprachverarbeitungsklopfen mit Python 2015
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
Bildverarbeitung mit Python (Pillow)
Nachbearbeitung von Python (NG)
Lineares Zeichnen mit einer Matrix-Originalforschung von einem Neuerfinder der Python-Bildverarbeitung-
Memorandum of Scraping & Machine Learning [Entwicklungstechnik] von Python (Kapitel 4)
Memorandum of Scraping & Machine Learning [Entwicklungstechnik] von Python (Kapitel 5)