Deep Learning vs boosting de gradient: quand utiliser quoi?

30

J'ai un gros problème de données avec un grand ensemble de données (prenez par exemple 50 millions de lignes et 200 colonnes). L'ensemble de données comprend environ 100 colonnes numériques et 100 colonnes catégorielles et une colonne de réponse qui représente un problème de classe binaire. La cardinalité de chacune des colonnes catégorielles est inférieure à 50.

Je veux savoir a priori si je dois opter pour des méthodes d'apprentissage en profondeur ou des méthodes basées sur des arbres d'ensemble (par exemple le boost de gradient, l'adaboost ou les forêts aléatoires). Existe-t-il une analyse exploratoire des données ou d'autres techniques qui peuvent m'aider à choisir une méthode plutôt qu'une autre?

Nitesh
la source
2
Je pense que si vous n'avez pas une bonne intuition sur les propriétés des données, vous finissez par explorer les deux options (peut-être sur seulement 500 000 lignes) et effectuez une validation croisée. Mais il y a peut-être des visualisations ou d'autres analyses qui peuvent vous aider à obtenir cette intuition.
Neil Slater
1
J'ai en fait prévu de faire une grande comparaison de modèles pour mes propres recherches sur des données réelles cette semaine. Je vais nettoyer un peu les résultats et les publier ici. De plus, au moins un étudiant CS a étudié la question: academia.edu/3526056/…
shadowtalker
1
@NeilSlater Je voudrais voir une réponse sur ce que cette intuition pourrait / pourrait / devrait être
shadowtalker
1
Je n'ai toujours pas assez de réputation pour mettre un petit commentaire sur votre question d'origine et ce n'est pas vraiment une réponse. En tout cas, je voulais dire que je pense que cet article est assez pertinent pour cette question: Fernández-Delgado, M., Cernadas, E., Barro, S., et Amorim, D. (2014). Avons-nous besoin de centaines de classificateurs pour résoudre des problèmes de classification réels? The Journal of Machine Learning Research, 15, 3133–3181. Récupéré de dl.acm.org/citation.cfm?id=2697065
José María Mateos
Existe-t-il une analyse exploratoire des données ou d'autres techniques qui peuvent m'aider à choisir une méthode plutôt qu'une autre? Dans le cas général non, le «théorème du déjeuner gratuit» le prouve. Mais il existe des heuristiques qui peuvent vous guider dans la bonne direction, par exemple scikit-learn.org/stable/tutorial/machine_learning_map/…
Simon

Réponses:

32

Pourquoi vous limiter à ces deux approches? Parce qu'ils sont cool? Je commencerais toujours par un classificateur / régresseur linéaire simple. Donc, dans ce cas, une SVM linéaire ou une régression logistique, de préférence avec une implémentation d'algorithme qui peut tirer parti de la rareté en raison de la taille des données. Il faudra beaucoup de temps pour exécuter un algorithme DL sur cet ensemble de données, et je n'essaierais normalement que l'apprentissage en profondeur sur des problèmes spécialisés où il y a une structure hiérarchique dans les données, telles que des images ou du texte. C'est exagéré pour beaucoup de problèmes d'apprentissage plus simples, et cela prend beaucoup de temps et d'expertise pour apprendre et les algorithmes DL sont également très lents à former. De plus, ce n'est pas parce que vous avez 50 millions de lignes que vous devez utiliser l'ensemble de données pour obtenir de bons résultats. Selon les données, vous pouvez obtenir de bons résultats avec un échantillon de quelques 100 000 lignes ou quelques millions. Je commencerais simplement, avec un petit échantillon et un classificateur linéaire, et deviendrais plus compliqué à partir de là si les résultats ne sont pas satisfaisants. Au moins de cette façon, vous obtiendrez une référence. Nous avons souvent trouvé des modèles linéaires simples pour réaliser des modèles plus sophistiqués sur la plupart des tâches, vous devez donc toujours commencer par là.

Simon
la source
4
+1 pour commencer avec un modèle simple et un sous-échantillonnage
Matt
Je suis d'accord avec l'utilisation de svm pour des données clairsemées, mais ne pensez-vous pas que svm prendra beaucoup de temps pour former un si grand ensemble de données dimensionnelles!
blitu12345
Non, surtout pas s'il est clairsemé et utilise un noyau linéaire. Mais ils peuvent avoir des problèmes avec un grand nombre de lignes. Ce sera beaucoup plus rapide qu'un modèle DL de toute façon. Mais notez que j'ai également recommandé une régression logistique.
Simon
Mon point principal est de commencer avec un modèle linéaire simple, et même de ne pas utiliser l'ensemble de données complet, car il est peu probable que vous ayez besoin de l'ensemble de données pour obtenir de bonnes performances. Je doute qu'il y ait beaucoup de différence de précision entre l'utilisation de disons 100 000 lignes et quelques millions.
Simon
+1 pour essayer le deep learning sur des problèmes spécialisés où il y a une structure hiérarchique dans les données
eric2323223
4

En plus d'autres réponses (et il y a un bon lien dans les commentaires), cela dépend du problème ou du type de questions auxquelles vous souhaitez répondre. Comme je ne peux que le suggérer sur la base de ma propre expérience, alors dans le cas d'une tâche de classification, les méthodes possibles peuvent être sévèrement limitées en fonction de l'équilibre des classes dans l'ensemble de données.

Une fois que vous avez atteint un déséquilibre de classe supérieur à environ 1:10, la plupart des méthodes de classification cessent de fonctionner. Vous vous retrouverez avec des méthodes basées sur une forêt aléatoire et peut-être des réseaux de neurones (pas encore essayés). Je travaille avec la balance de classe dans la plage de 1: 500 à 1: 1000 et j'ai constaté que ni le sous-échantillonnage ni le suréchantillonnage ne fonctionnent. Heureusement, mon ensemble de données est "seulement" 6 mln d'observations par 200 variables et je suis capable d'exécuter des arbres boostés sur l'ensemble dans un délai raisonnable.

Donc pour répondre directement à votre question:

  • vous devriez trouver un tas de questions auxquelles vous voudriez répondre et en cas de classification, vérifiez les soldes de classe des variables cibles.

  • vous devez vérifier la distribution (pas au sens mathématique) des valeurs manquantes dans toutes vos données et documenter ce que vous trouvez. Certaines méthodes ML sont très bien avec des valeurs manquantes tandis que d'autres ne le sont pas et vous devez examiner l'imputation des données (qui a son propre ensemble de règles, de directives et de problèmes).

LauriK
la source
1
Essayez le classificateur SGD de sklearn avec class_weight = “balancé”
Diego
4

De mon point de vue, pour 5 millions d'instances, vous avez besoin de beaucoup d'arbres pour obtenir une bonne limite de généralisation (un bon modèle en termes simples). Si ce n'est pas un problème, allez-y, même la réponse exacte dépend de la nature de votre problème. GBT est une bonne méthode, surtout si vous avez des types d'entités mixtes comme catégorique, numérique et autres. De plus, par rapport aux réseaux neuronaux, le nombre d'hyperparamètres à régler est inférieur. Par conséquent, il est plus rapide d'avoir un meilleur modèle de réglage. Une autre chose est l'alternative de la formation parallèle. Vous pouvez entraîner plusieurs arbres en même temps avec un bon processeur. Si vous n'êtes pas satisfait des résultats, optez pour les réseaux neuronaux, car cela signifie que votre modèle devrait être plus étendu et devrait apprendre des informations d'ordre supérieur grâce à vos données. C'est la raison des NN par rapport aux autres algorithmes d'apprentissage.

erogol
la source
4

Dans la lignée de ce que @Simon a déjà dit:

  1. Les approches d'apprentissage en profondeur ont été particulièrement utiles pour résoudre des problèmes de modélisation de la vision, de la parole et du langage où l'ingénierie des fonctionnalités est délicate et demande beaucoup d'efforts.
  2. Pour votre application, cela ne semble pas être le cas, car vous avez des fonctionnalités bien définies et seules les interactions de fonctionnalités, etc. sont nécessaires.
  3. Étant donné que les modèles d'apprentissage profond nécessitent actuellement beaucoup de ressources informatiques et de temps scientifique pour coder les choses, je suggère d'opter pour une approche non profonde.

Pour votre problème, le compromis effort / avantage ne semble pas être en faveur du deep learning. DL serait une exagération

wabbit
la source
1

Lorsque vous disposez d'un tel ensemble de données, vous pouvez jouer avec n'importe laquelle des techniques de modélisation statistique et d'apprentissage automatique, ce qui est fortement encouragé. Comme d'autres l'ont suggéré, je recommanderais également de prendre quelques millions d'échantillons aléatoires à partir des données et de jouer avec. Puisqu'il s'agit d'un problème de classification, je suivrais d'abord des techniques de classification simples, puis j'utiliserais plus tard des techniques plus complexes. La régression logistique est idéale pour commencer.

Je voulais ajouter que les modèles génératifs doivent également être testés. Le classificateur Naive Bayes est l'un des classificateurs probabilistes les plus simples et il surpasse de nombreuses méthodes complexes comme les machines à vecteurs de support sur de nombreuses tâches. Vous pouvez regarder cette mise en oeuvre simple du Nouveau - Brunswick et ce lien pour la comparaison du Nouveau - Brunswick à la régression logistique.

On peut construire un classifieur Naive bayes (NB) comme modèle de base, puis opter pour n'importe quelle technique d'apprentissage automatique comme les machines à vecteurs de support (SVM) ou les perceptrons multicouches (MLP). Un compromis ici est que le NB est moins cher en calcul que le MLP, donc une meilleure performance du MLP est souhaitée.

Pour en venir à votre requête exacte: l'apprentissage en profondeur et le renforcement de l'arbre de gradient sont des techniques très puissantes qui peuvent modéliser tout type de relation dans les données. Mais que se passe-t-il si dans votre cas une simple régression logistique ou NB donne la précision souhaitée. Il est donc toujours préférable d'essayer d'abord les techniques simples et d'avoir des performances de base. Ensuite, on peut opter pour les modèles complexes et comparer avec la ligne de base.

naïve
la source