Що таке хороший ресурс, який включає порівняння плюсів і мінусів різних класифікаторів?


15

Який найкращий класичний класифікатор 2-го класу? Так, я думаю, це питання про мільйон доларів, і так, я знаю, що немає теореми про безкоштовний обід , і я також прочитав попередні питання:

І все-таки мені цікаво читати більше на цю тему.

Що є хорошим джерелом інформації, що включає загальне порівняння характеристик, переваги та особливостей різних класифікаторів?


+ пробачте, будь ласка, що я не є носієм англійської мови :)
Dov

Відповіді:


9

ESL , як уже згадувалося Пітером Флом, є відмінною пропозицією (зверніть увагу , що моя посилання на домашню сторінку автора , де книга може бути отримана у вигляді PDF-файлу безкоштовно). Дозвольте додати ще кілька конкретних речей, які потрібно шукати в книзі:

  • Таблиця 10.1 (стор. 351) дає авторам оцінку певних характеристик ядер Neural Nets, SVM, Trees, MARS та k-NN, які якимось чином видаються методами, які автори хочуть включити до списку "off-the- полки »методи.
  • У Розділі 10 розглядається прискорення, яке я виявив відсутнім у переліку методів опитування, цитованого ОП. Збільшення градієнта, здається, є одним із найбільш ефективних методів у ряді прикладів.
  • У Розділі 9 розглядаються узагальнені моделі адитивів (GAM), що додає до логістичної регресійної моделі (верхній рейтинг у опитуванні ) гнучкість нелінійних адитивних ефектів прогнозів. GAM не були б такими ж простими у використанні, як логістична регресія з усіма згладжуючими параметрами, які потрібно вибрати, якби не такі приємні реалізації, як у пакеті Rc mgcv .

Додайте до книги своє Machine View Task View for R, який дає деяке враження про те, що насправді можуть зробити багато пакетів машинного навчання, хоча реального порівняння немає. Для користувачів Python я думаю, що scikit.learn - це гарне місце для пошуку. Наскільки метод "не в коробці" або "не на полиці", дуже залежить від того, наскільки добре реалізація реагує на автоматичне пристосування до ситуації з даними, а не на детальну настройку користувачеві. На мій погляд, mgcv для R - хороший приклад, який робить примірник досить хорошої узагальненої моделі добавок дійсно легким та, в основному, без потреби користувачеві щось «налаштовувати».


8

Ресурси, перелічені іншими, безумовно, корисні, але я підкажу і додам наступне: "найкращий" класифікатор, швидше за все, має конкретний контекст та дані. Нещодавно під час оцінювання різних бінарних класифікаторів я виявив, що дерево підсиленої регресії працює стабільно краще, ніж інші методи, до яких я мав доступ. Ключовим для мене стало навчитися користуватися інструментами Orange для пошуку даних Orange . У них є чудова документація, щоб розпочати вивчення цих методів разом із вашими даних. Наприклад, ось короткий сценарій Python, який я написав, щоб оцінити якість декількох класифікаторів за допомогою декількох заходів точності, використовуючи k-кратну перехресну перевірку.

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)

Коли я запускаю цей код на своїх даних, я отримую вигляд на зразок

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

Є набагато більше, що ви можете зробити з помаранчевими об’єктами, щоб самоаналіз продуктивності та порівняння. Я вважав, що цей пакет є надзвичайно корисним для написання невеликої кількості коду, щоб реально застосувати методи до моїх даних із послідовним API та абстрагуванням проблеми (тобто мені не потрібно було використовувати шість різних пакетів від шести різних авторів, кожен з яких має своїх власних підхід до проектування та документації API тощо).



4

Інші ресурси, які я знайшов щодо цього (безкоштовний PDF-файл):


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.