Qual é um bom recurso que inclui uma comparação dos prós e contras de diferentes classificadores?

15

Qual é o melhor classificador de 2 classes pronto para uso? Sim, acho que essa é a pergunta de um milhão de dólares, e sim, estou ciente do teorema do almoço sem graça e também li as perguntas anteriores:

Ainda assim, estou interessado em ler mais sobre o assunto.

Qual é uma boa fonte de informações que inclui uma comparação geral das características, vantagens e características dos diferentes classificadores?

Dov
fonte
+ Por favor me perdoe que eu não sou um falante nativo Inglês :)
Dov

Respostas:

9

A ESL , como já mencionado por Peter Flom, é uma excelente sugestão (observe que meu link é para a página inicial do autor, onde o livro pode ser obtido como um arquivo PDF gratuitamente). Deixe-me adicionar algumas coisas mais específicas para procurar no livro:

  • A Tabela 10.1 (página 351) fornece aos autores a avaliação de certas características dos núcleos de redes neurais, SVM, Trees, MARS e k-NN, que de alguma forma parecem ser os métodos que os autores desejam incluir em uma lista de métodos de prateleira ".
  • O capítulo 10 trata do reforço, que achei ausente na lista de métodos da pesquisa citada pelo OP. O aumento de gradiente parece ser um dos métodos com melhor desempenho em vários exemplos.
  • O capítulo 9 trata dos modelos aditivos generalizados (GAMs), que adiciona ao modelo de regressão logística (o primeiro classificado na pesquisa ) a flexibilidade dos efeitos aditivos não lineares dos preditores. Os GAMs não seriam tão fáceis de usar quanto a regressão logística com todos os parâmetros de suavização que devem ser escolhidos se não fosse para implementações legais como a do pacote R mgcv .

Acrescente ao livro a Visualização de tarefas de aprendizado de máquina para R, que dá uma impressão do que os muitos pacotes de aprendizado de máquina podem realmente fazer, embora não haja comparação real. Para usuários de Python, imagino que o scikit.learn seja um bom lugar para procurar. A quantidade de método "pronto para uso" ou "pronto para uso" é muito determinada pela forma como a implementação lida com a adaptação automática à situação dos dados, em vez de deixar o ajuste detalhado para o usuário. Na minha opinião, mgcv for R é um bom exemplo que facilita muito o ajuste de um modelo de aditivo generalizado razoavelmente bom e basicamente sem a necessidade de o usuário "ajustar manualmente" qualquer coisa.

NRH
fonte
8

Os recursos listados por outras pessoas são certamente úteis, mas adicionarei o seguinte: o classificador "melhor" provavelmente será específico ao contexto e aos dados. Em uma recente incursão na avaliação de diferentes classificadores binários, encontrei uma Árvore de regressão impulsionada para funcionar consistentemente melhor do que outros métodos aos quais tive acesso. O principal para mim foi aprender a usar as ferramentas de mineração de dados da Orange . Eles têm uma ótima documentação para começar a explorar esses métodos com seus dados. Por exemplo, aqui está um pequeno script Python que escrevi para avaliar a qualidade de vários classificadores em várias medidas de precisão usando a validação cruzada k-fold.

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)

Quando executo esse código nos meus dados, recebo uma saída como

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

Você pode fazer muito mais com os objetos Orange para examinar o desempenho e fazer comparações. Eu achei esse pacote extremamente útil ao escrever uma pequena quantidade de código para realmente aplicar métodos aos meus dados com uma API consistente e abstração de problemas (ou seja, eu não precisei usar seis pacotes diferentes de seis autores diferentes, cada um com seu próprio abordagem ao design e documentação da API, etc).

Josh Hemann
fonte
1

De acordo com este exaustivo estudo recente (avaliação de 179 classificadores em 121 conjuntos de dados), os melhores classificadores são florestas aleatórias seguidas por máquinas de vetores de suporte.

Miroslav Sabo
fonte