Die von anderen aufgelisteten Ressourcen sind sicherlich alle nützlich, aber ich werde Folgendes hinzufügen: Der "beste" Klassifikator ist wahrscheinlich kontext- und datenspezifisch. Bei einem kürzlich durchgeführten Versuch, verschiedene binäre Klassifikatoren zu bewerten, stellte ich fest, dass ein Boosted Regression Tree durchgehend besser funktioniert als andere Methoden, auf die ich Zugriff hatte. Das Wichtigste für mich war, den Umgang mit den Data Mining-Tools von Orange zu lernen . Sie haben einige großartige Dokumentationen, mit denen Sie beginnen können, diese Methoden mit Ihren Daten zu erkunden . Zum Beispiel ist hier ein kurzes Python-Skript, das ich geschrieben habe, um die Qualität mehrerer Klassifikatoren über mehrere Genauigkeitsmaße hinweg mithilfe der k-fachen Kreuzvalidierung zu bewerten.
import orange, orngTest, orngStat, orngTree , orngEnsemble, orngSVM, orngLR
import numpy as np
data = orange.ExampleTable("performance_orange_2.tab")
bayes = orange.BayesLearner(name="Naive Bayes")
svm = orngSVM.SVMLearner(name="SVM")
tree = orngTree.TreeLearner(mForPruning=2, name="Regression Tree")
bs = orngEnsemble.BoostedLearner(tree, name="Boosted Tree")
bg = orngEnsemble.BaggedLearner(tree, name="Bagged Tree")
forest = orngEnsemble.RandomForestLearner(trees=100, name="Random Forest")
learners = [bayes, svm, tree, bs, bg, forest]
results = orngTest.crossValidation(learners, data, folds=10)
cm = orngStat.computeConfusionMatrices(results,
classIndex=data.domain.classVar.values.index('1'))
stat = (('ClsAcc', 'CA(results)'),
('Sens', 'sens(cm)'),
('Spec', 'spec(cm)'),
('AUC', 'AUC(results)'),
('Info', 'IS(results)'),
('Brier', 'BrierScore(results)'))
scores = [eval("orngStat." + s[1]) for s in stat]
print "Learner " + "".join(["%-9s" % s[0] for s in stat])
print "-----------------------------------------------------------------"
for (i, L) in enumerate(learners):
print "%-15s " % L.name + "".join(["%5.3f " % s[i] for s in scores])
print "\n\n"
measure = orngEnsemble.MeasureAttribute_randomForests(trees=100)
print "Random Forest Variable Importance"
print "---------------------------------"
imps = measure.importances(data)
for i,imp in enumerate(imps):
print "%-20s %6.2f" % (data.domain.attributes[i].name, imp)
print '\n\n'
print 'Predictions on new data...'
bs_classifier = bs(data)
new_data = orange.ExampleTable('performance_orange_new.tab')
for obs in new_data:
print bs_classifier(obs, orange.GetBoth)
Wenn ich diesen Code auf meinen Daten ausführe, erhalte ich eine Ausgabe wie
In [1]: %run binary_predict.py
Learner ClsAcc Sens Spec AUC Info Brier
-----------------------------------------------------------------
Naive Bayes 0.556 0.444 0.643 0.756 0.516 0.613
SVM 0.611 0.667 0.714 0.851 0.264 0.582
Regression Tree 0.736 0.778 0.786 0.836 0.945 0.527
Boosted Tree 0.778 0.778 0.857 0.911 1.074 0.444
Bagged Tree 0.653 0.667 0.786 0.816 0.564 0.547
Random Forest 0.736 0.667 0.929 0.940 0.455 0.512
Random Forest Variable Importance
---------------------------------
Mileage 2.34
Trade_Area_QI 2.82
Site_Score 8.76
Mit den Orange-Objekten können Sie noch viel mehr tun, um die Leistung zu überprüfen und Vergleiche anzustellen. Ich fand dieses Paket äußerst hilfreich beim Schreiben einer kleinen Menge an Code, um Methoden mit einer konsistenten API und Problemabstraktion auf meine Daten anzuwenden (dh ich musste nicht sechs verschiedene Pakete von sechs verschiedenen Autoren verwenden, die jeweils ihre eigenen haben Ansatz für API-Design und -Dokumentation usw.).