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.
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)
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?
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