Apa sumber daya yang baik yang mencakup perbandingan pro dan kontra dari pengklasifikasi yang berbeda?

15

Apa classifier 2-kelas out-of-the-box terbaik? Ya, saya kira itu adalah pertanyaan jutaan dolar, dan ya, saya menyadari teorema makan siang gratis , dan saya juga membaca pertanyaan sebelumnya:

Tetap saja, saya tertarik membaca lebih banyak tentang masalah ini.

Apa sumber informasi yang baik yang mencakup perbandingan umum dari karakteristik, keunggulan, dan fitur dari pengklasifikasi yang berbeda?

Dov
sumber
+ tolong maafkan saya bahwa saya bukan penutur asli bahasa Inggris :)
Dov

Jawaban:

9

The ESL , sebagaimana telah disebutkan oleh Peter Flom, adalah saran yang sangat baik (catatan bahwa link saya adalah untuk homepage penulis di mana buku tersebut dapat diperoleh sebagai pdf-file yang gratis). Izinkan saya menambahkan beberapa hal yang lebih spesifik untuk dicari dalam buku:

  • Tabel 10.1 (halaman 351) memberikan penilaian penulis tentang karakteristik tertentu dari Jaring Saraf Tiruan, SVM, Pohon, MARS, dan kernel k-NN, yang entah bagaimana tampak sebagai metode yang penulis ingin sertakan dalam daftar "off the the-" metode rak.
  • Bab 10 memperlakukan boosting, yang saya temukan hilang dalam daftar metode dalam polling yang dikutip oleh OP. Peningkatan gradien tampaknya menjadi salah satu metode dengan kinerja yang lebih baik dalam sejumlah contoh.
  • Bab 9 memperlakukan model aditif umum (GAM), yang menambah model regresi logistik (peringkat teratas dalam jajak pendapat ) fleksibilitas efek aditif non-linear dari prediktor. GAM tidak akan semudah digunakan sebagai regresi logistik dengan semua parameter perataan yang harus dipilih jika bukan karena implementasi yang bagus seperti yang ada dalam paket R mgcv .

Tambahkan ke buku Machine Learning Task View for R, yang memberikan kesan tentang apa yang sebenarnya bisa dilakukan oleh banyak paket pembelajaran mesin, meskipun tidak ada perbandingan nyata. Untuk pengguna Python saya membayangkan bahwa scikit.learn adalah tempat yang bagus untuk dilihat. Seberapa banyak metode "out-of-the-box" atau "off-the-shelf", sangat ditentukan oleh seberapa baik implementasi berkaitan dengan adaptasi otomatis ke situasi data versus membiarkan penyetelan terperinci kepada pengguna. Dalam pikiran saya, mgcv untuk R adalah contoh yang baik yang membuat pemasangan model aditif umum yang cukup baik sangat mudah dan pada dasarnya tanpa perlu bagi pengguna untuk "mengatur-tune" apa pun.

NRH
sumber
8

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

Josh Hemann
sumber