Por que o svm não é tão bom quanto a árvore de decisão nos mesmos dados?

8

Eu sou novo no aprendizado de máquina e tento usar o scikit-learn (sklearn) para lidar com um problema de classificação. O DecisionTree e o SVM podem treinar um classificador para esse problema.

Uso sklearn.ensemble.RandomForestClassifiere sklearn.svm.SVCajusto os mesmos dados de treinamento (cerca de 500.000 entradas com 50 recursos por entrada). O RandomForestClassifier sai com um classificador em cerca de um minuto. O SVC usa mais de 24 horas e continua funcionando.

Por que o SVC funciona tão ineficientemente? O conjunto de dados é muito grande para o SVC ? O SVC é impróprio para esse problema?

Java Xu
fonte

Respostas:

12

As possibilidades incluem o uso de um kernel inadequado (por exemplo, um kernel linear para um problema não linear), má escolha do kernel e hiperparâmetros de regularização. Boa seleção de modelo (a escolha do kernel e do ajuste de hiperparâmetros é a chave para obter um bom desempenho dos SVMs; somente se espera que eles apresentem bons resultados quando usados ​​corretamente).

Os SVMs geralmente demoram muito tempo para serem treinados, isso é especialmente verdade quando a escolha do kernel e, principalmente, dos parâmetros de regularização significa que quase todos os dados acabam como vetores de suporte (a escassez de SVMs é um subproduto útil, nada mais).

Por fim, os teoremas de ausência de almoço grátis dizem que não há superioridade a priori para nenhum sistema classificador em relação aos outros; portanto, o melhor classificador para uma tarefa específica depende ele próprio da tarefa. No entanto, existe uma teoria mais convincente para o SVM que sugere que é provável que seja uma melhor escolha do que muitas outras abordagens para muitos problemas.

Dikran Marsupial
fonte
2
1. Como sei se um problema é linear ou não? De acordo com os dados de treinamento? 2. Você poderia recomendar alguns materiais sobre "como fazer uma boa escolha de kernel e ajustar o hiperparâmetro"?
Java Xu
Geralmente, não é possível saber com certeza que um problema é linear, mas os classificadores não lineares que superam consistentemente os não lineares são uma indicação clara de que se trata de uma tarefa não linear.
Dikran Marsupial
Para ajustar os parâmetros do kernel e da regularização, a validação cruzada é uma abordagem razoável, usando uma pesquisa em grade ou algum método de otimização numérica (eu uso o Nelder Mead simplex). Para SVMs, o "limite de expansão" fornece uma aproximação útil ao erro de validação cruzada de deixar para fora. Observe que você precisa usar algo como validação cruzada aninhada, caso deseje uma estimativa de desempenho imparcial (veja as respostas para outras perguntas que dei).
Dikran Marsupial
1
500k pontos de dados é um problema grande o suficiente para que os SVMs do kernel demorem um pouco para serem treinados. Vale a pena experimentar o LinearSVM, que suporta apenas um classificador linear, mas roda muito mais rápido, ou um classificador SGD , que pode ser ainda mais rápido. Se isso não funcionar bem, você pode tentar usar a aproximação do kernel , que permite usar o classificador linear para aproximar um não-linear. Dito isto, florestas aleatórias também são um bom algoritmo e podem ser melhores para seus dados.
Dougal 05/05
17

Árvores de decisão e florestas aleatórias são, na verdade, classificadores extremamente bons. Embora os SVMs (Support Vector Machines) sejam vistos como mais complexos, isso não significa que eles terão um desempenho melhor.

O artigo "Uma comparação empírica de algoritmos de aprendizado supervisionado" da Rich Caruana comparou 10 classificadores binários diferentes, SVM, Redes Neurais, KNN, regressão logística, Bayes ingênuas, florestas aleatórias, árvores de decisão, árvores de decisão em saco, árvores de decisão reforçada e decisão com bootstrap Árvores em onze conjuntos de dados diferentes e compararam os resultados em 8 métricas de desempenho diferentes.

Eles descobriram que as árvores de decisão impulsionadas chegaram primeiro com as florestas aleatórias e depois as árvores de decisão em saco e depois o SVM

Os resultados também dependerão de quantas classes você está realmente classificando.

RMcG
fonte
5

"se um problema é linear ou não" Em um problema de classificação binária, se o conjunto de dados pode ser separado por um hiperplano, é um problema linear.

Se o conjunto de dados não for separável linear, enquanto você tenta um classificador linear para encontrar um hiperplano inexistente, o algoritmo pode parecer funcionar para sempre.

Uma sugestão: você pode experimentar uma pequena parte de seus dados e experimentar esses algoritmos para verificar se funciona em um pequeno conjunto de dados. Aumente o conjunto de dados para verificar quando esse problema ocorre.

Shusen Liu
fonte