Des alternatives aux arbres de classification, avec de meilleures performances prédictives (ex: CV)?


23

Je recherche une alternative aux arbres de classification qui pourrait donner un meilleur pouvoir prédictif.

Les données dont je traite ont des facteurs à la fois pour les variables explicatives et expliquées.

Je me souviens avoir rencontré des forêts aléatoires et des réseaux de neurones dans ce contexte, bien que jamais essayé auparavant, existe-t-il un autre bon candidat pour une telle tâche de modélisation (en R, évidemment)?


5
Ne vous embêtez pas avec les réseaux de neurones, c'est une technologie obsolète.

1
@mbq maintenez-vous toujours cette déclaration?
rhombidodécaèdre

@rhombidodecahedron Bien sûr, jouez avec des NN de 2010 et vous serez d'accord. En outre, je doute que tout modèle DL apporterait quoi que ce soit à une table avec des données de (vraisemblablement) de si petite taille.

Réponses:


25

Je pense qu'il vaudrait la peine d'essayer Random Forests ( randomForest ); certaines références ont été fournies en réponse à des questions connexes: sélection des fonctionnalités pour le modèle «final» lors de la validation croisée dans l'apprentissage automatique ; Les modèles CART peuvent-ils être rendus robustes? . Le suralimentation / l'ensachage les rendent plus stables qu'un seul chariot qui est connu pour être très sensible aux petites perturbations. Certains auteurs ont fait valoir qu'il fonctionnait aussi bien que les SVM ou les boosters de dégradés pénalisés (voir, par exemple, Cutler et al., 2009). Je pense qu'ils surpassent certainement les NN.

Boulesteix et Strobl fournit un bon aperçu de plusieurs classificateurs dans la sélection optimale des classificateurs et le biais négatif dans l'estimation du taux d'erreur: une étude empirique sur la prédiction à haute dimension (BMC MRM 2009 9: 85). J'ai entendu parler d'une autre bonne étude lors de la IVe réunion EAM , qui devrait être examinée dans Statistics in Medicine ,

João Maroco , Dina Silva, Manuela Guerreiro, Alexandre de Mendonça. Les forêts aléatoires surclassent-elles les réseaux de neurones, prennent-elles en charge les machines à vecteurs et les classificateurs d'analyse discriminante? Une étude de cas sur l'évolution vers la démence chez les patients âgés souffrant de troubles cognitifs

J'aime aussi le package caret : il est bien documenté et permet de comparer la précision prédictive de différents classificateurs sur le même ensemble de données. Il prend en charge la gestion des échantillons de formation / test, la précision du calcul, etc. dans quelques fonctions conviviales.

Le package glmnet , de Friedman et coll., Implémente le GLM pénalisé (voir la revue dans le Journal of Statistical Software ), donc vous restez dans un cadre de modélisation bien connu.

Sinon, vous pouvez également rechercher des classificateurs basés sur des règles d'association (voir la vue des tâches CRAN sur l' apprentissage automatique ou les 10 meilleurs algorithmes d'exploration de données pour une introduction en douceur à certains d'entre eux).

Je voudrais mentionner une autre approche intéressante que je prévois de réimplémenter dans R (en fait, c'est le code Matlab) qui est l'analyse de correspondance discriminante d'Hervé Abdi. Bien qu'initialement développé pour faire face à des études sur de petits échantillons avec de nombreuses variables explicatives (éventuellement regroupées en blocs cohérents), il semble combiner efficacement l'AD classique avec les techniques de réduction des données.

Les références

  1. Cutler, A., Cutler, DR et Stevens, JR (2009). Tree-Based Methods , dans High-Dimensional Data Analysis in Cancer Research , Li, X. et Xu, R. (éd.), Pp. 83-101, Springer.
  2. Saeys, Y., Inza, I. et Larrañaga, P. (2007). Un examen des techniques de sélection des fonctionnalités en bioinformatique . Bioinformatics, 23 (19): 2507-2517.

2
+1 Excellente réponse. Je suis également d'accord avec la recommandation du caret.
Shane du

12

Il est important de garder à l'esprit qu'il n'y a pas d'algorithme unique qui soit toujours meilleur que les autres. Comme indiqué par Wolpert et Macready, "deux algorithmes sont équivalents lorsque leurs performances sont moyennées pour tous les problèmes possibles". (Voir Wikipedia pour plus de détails.)

Pour une application donnée, la «meilleure» est généralement celle qui est la plus proche de votre application en termes d'hypothèses qu'elle fait, de types de données qu'elle peut traiter, d'hypothèses qu'elle peut représenter, etc.

C'est donc une bonne idée de caractériser vos données selon des critères tels que:

  • Ai-je un ensemble de données très volumineux ou modeste?
  • La dimensionnalité est-elle élevée?
  • Les variables sont-elles numériques (continues / discrètes) ou symboliques, ou mixtes, et / ou peuvent-elles être transformées si nécessaire?
  • Les variables sont-elles susceptibles d'être largement indépendantes ou assez dépendantes?
  • Y a-t-il probablement des variables redondantes, bruyantes ou non pertinentes?
  • Est-ce que je veux pouvoir inspecter le modèle généré et essayer de le comprendre?

En y répondant, vous pouvez éliminer certains algorithmes et en identifier d'autres comme potentiellement pertinents, puis vous retrouver avec un petit ensemble de méthodes candidates que vous avez intelligemment choisies comme susceptibles d'être utiles.

Désolé de ne pas vous donner une réponse simple, mais j'espère que cela vous aidera quand même!


2
+1 J'adore la citation. ("deux algorithmes sont équivalents lorsque leurs performances sont moyennées pour tous les problèmes possibles.")
Assad Ebrahim

8

Pour la classification multi-classes, les machines à vecteurs de support sont également un bon choix. J'utilise généralement le package R kernlab pour cela.

Voir le document JSS suivant pour une bonne discussion: http://www.jstatsoft.org/v15/i09/


@Tal Voici un examen juste (ou je pense que oui) de SVM vs RF: une comparaison complète des forêts aléatoires et des machines à vecteurs de support pour la classification du cancer basée sur les microréseaux, j.mp/ab7U8V . Je préfère aussi kernlabà e1071.
chl

2
@chl Je n'aime pas cet article alors qu'il est fait du point de vue de l'apprentissage SVM - faire une répétition d'un algorithme stochastique (RF) n'est qu'une ordure; également l'annexe 2 montre à quel point il peut être mauvais d'appliquer le flux de travail SVM à RF. Pourtant, je suis d'accord que presque toujours SVM peut être réglé pour surpasser les RF à cause de l'astuce du noyau (que les RF simples n'ont pas, même si cela ne signifie pas qu'il ne peut pas l'avoir en général), mais avec un effort d'optimisation croissant de manière exponentielle.

@mbq En effet, c'est un bon point.
chl

3

Comme déjà mentionné, les forêts aléatoires sont une «mise à niveau» naturelle et, de nos jours, les SVM sont généralement la technique recommandée à utiliser.

Je veux ajouter que le plus souvent, le passage à SVM donne des résultats très décevants. Le fait est que, alors que les techniques comme les arbres aléatoires sont presque triviales à utiliser, les SVM sont un peu plus compliqués.

J'ai trouvé ce document précieux lorsque j'ai utilisé SVM pour la première fois (Un guide pratique pour prendre en charge la classification des vecteurs) http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf

Dans R, vous pouvez utiliser le package e1071 pour SVM, il est lié à la bibliothèque de facto standard (dans les logiciels libres au moins!) LibSVM.


2
kernlab utilise également libsvm pour l'optimisation, il n'y a donc pas de grande différence dans ce sens (bien qu'il soit beaucoup plus flexible).
Shane

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.