Sumber daya yang tercantum oleh orang lain tentu saja berguna, tetapi saya akan berpadu dan menambahkan yang berikut: penggolong "terbaik" cenderung untuk konteks dan data tertentu. Dalam perampokan baru-baru ini untuk menilai pengklasifikasi biner yang berbeda, saya menemukan Boosted Regression Tree untuk bekerja secara konsisten lebih baik daripada metode lain yang saya akses. Hal utama bagi saya adalah belajar bagaimana menggunakan alat penambangan data Orange . Mereka memiliki beberapa dokumentasi yang bagus untuk memulai menjelajahi metode ini dengan data Anda . Sebagai contoh, berikut ini adalah skrip Python pendek yang saya tulis untuk menilai kualitas dari beberapa pengklasifikasi di berbagai ukuran akurasi menggunakan k-fold cross validation.
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)
Ketika saya menjalankan kode ini pada data saya, saya mendapatkan output seperti
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
Ada banyak lagi yang dapat Anda lakukan dengan objek Oranye untuk mengintrospeksi kinerja dan membuat perbandingan. Saya menemukan paket ini sangat membantu dalam menulis sejumlah kecil kode untuk benar-benar menerapkan metode ke data saya dengan API yang konsisten dan abstraksi masalah (yaitu, saya tidak perlu menggunakan enam paket berbeda dari enam penulis berbeda, masing-masing dengan mereka sendiri pendekatan untuk desain dan dokumentasi API, dll).