Meilleures pratiques d'apprentissage automatique pour les Big Dataset


9

Je suis sur le point d'obtenir mon diplôme de Master et j'ai appris l'apprentissage automatique ainsi que des projets de recherche avec lui. Je m'interroge sur les meilleures pratiques de l'industrie lors de l'exécution de tâches d'apprentissage automatique avec des Big Datasets (comme 100 Go ou To). Appréciez si vos collègues scientifiques des données peuvent partager leur expérience. Voici mes questions:

  1. De toute évidence, les très grands ensembles de données prennent plus de temps à s'entraîner (cela peut prendre des jours ou des semaines). Plusieurs fois, nous devons former différents modèles (SVM, Neural Network, etc.) pour comparer et trouver un meilleur modèle de performance. Je soupçonne que, dans les projets industriels, nous voulons que les résultats soient aussi rapides que possible mais produisent les meilleures performances. Y a-t-il des conseils pour réduire le temps de formation et de test? Si vous recommandez de sous-ensemble de l'ensemble de données, je serai intéressé d'apprendre comment mieux sous-ensemble l'ensemble de données pour couvrir tout ou la majorité des scénarios de l'ensemble de données.
  2. Nous savons que la validation croisée est meilleure car elle peut réduire le sur-ajustement. Cependant, la validation croisée prend également du temps à s'entraîner et le modèle formé à la validation croisée peut ne pas être implémenté directement (en parlant de l'expérience de python sklearn: j'ai besoin de former à nouveau le modèle avec l'ensemble de données après les tests de validation croisée pour qu'il soit implémenté). Faites-vous normalement la validation croisée dans vos projets de Big Data ou vous débrouillez-vous avec la division train-test?

Appréciez la rétroaction.

Réponses:


8

Je vais énumérer quelques pratiques que j'ai trouvées utiles, j'espère que cela vous aidera:

  1. Que les données soient volumineuses ou non, la validation croisée est indispensable lors de la construction d'un modèle. Si cela prend plus de temps qu'un consommateur final ne souhaite attendre, vous devrez peut-être réinitialiser ses attentes ou obtenir un matériel / logiciel plus rapide pour construire le modèle; mais ne sautez pas la validation croisée. Le traçage des courbes d'apprentissage et la validation croisée sont des étapes efficaces pour nous guider afin que nous reconnaissions et corrigions les erreurs plus tôt dans le processus. J'ai connu des cas où un simple ensemble de test de train ne révèle aucun problème jusqu'à ce que j'exécute des validations croisées et découvre une grande variance dans les performances de l'algorithme sur différents plis.

  2. Avant de dimensionner un ensemble de données, éliminez les enregistrements avec des valeurs manquantes de variables clés et de valeurs aberrantes, des colonnes de variables hautement corrélées et des variables de variance proches de zéro. Cela vous donnera une bien meilleure estimation de l'ensemble de données utilisable réel. Parfois, vous pouvez vous retrouver avec seulement une fraction de l'ensemble de données disponible qui peut réellement être utilisé pour construire un modèle.

  3. Lors du dimensionnement d'un jeu de données pour la construction d'un modèle, il est plus facile d'estimer les ressources de calcul si vous énumérez le jeu de données en lignes et colonnes et la taille de la mémoire de la matrice numérique finale. Étant donné que chaque algorithme d'apprentissage automatique va finalement convertir l'ensemble de données en une matrice numérique, l'énumération de la taille de l'ensemble de données en termes de Go / To de données d'entrée brutes (qui peuvent être principalement des chaînes / des variables nominales textuelles / etc.) est souvent trompeuse et la l'ensemble de données peut sembler plus intimidant et gigantesque à utiliser qu'il ne l'est.

  4. Une fois que vous connaissez (ou estimez) la taille finale utilisable de votre jeu de données, vérifiez si vous avez une machine appropriée pour pouvoir la charger en mémoire et former le modèle. Si la taille de votre jeu de données est inférieure à la mémoire disponible / utilisable par le logiciel, vous n'avez plus à vous soucier de la taille.

  5. Si la taille de l'ensemble de données est supérieure à la mémoire disponible pour former un modèle, vous pouvez essayer ces approches (en commençant par les plus simples en premier):

    • Utiliser une machine avec plus de mémoire: si vous utilisez un fournisseur de services cloud, l'approche la plus simple pourrait être simplement de provisionner plus de mémoire et de continuer à construire le modèle comme d'habitude. Pour les machines physiques, essayez de vous procurer de la RAM supplémentaire, son prix continue de baisser et si votre jeu de données va rester aussi gros ou grossir au fil du temps, alors c'est un bon investissement.
    • Ajouter des nœuds au cluster: pour les déploiements informatiques en cluster basés sur Hadoop et Spark, la formation sur un ensemble de données plus important est aussi simple que l'ajout de machines au cluster.
    • Très souvent, les tâches de classification nécessitent une formation sur les données avec des classes très déséquilibrées, le rapport des classes positives aux négatives pouvant parfois atteindre 1: 1000 ou plus. Une méthode simple pour améliorer la précision dans ces cas consiste à suréchantillonner la classe minoritaire ou à sous-échantillonner la classe majoritaire, ou à faire les deux ensemble. Si vous avez un grand ensemble de données, le sous-échantillonnage de la classe majoritaire est une très bonne option qui améliorera la précision de votre algorithme et réduira le temps de formation.
    • Construisez un ensemble: divisez l'ensemble de données au hasard et formez plusieurs apprenants de base sur chaque partie, puis combinez-les pour obtenir la prédiction finale. Cela utiliserait le plus efficacement possible l'ensemble de données volumineux et produirait un modèle plus précis. Mais vous devez passer plus de temps pour construire soigneusement l'ensemble et éviter les pièges habituels de la construction d'ensemble.
    • Si vous utilisez un ensemble, entraînez de nombreux modèles à fil unique en parallèle. Presque tous les logiciels ML offrent des fonctionnalités pour entraîner plusieurs modèles sur différents cœurs ou sur des nœuds distincts.
    • Évaluez plusieurs algorithmes différents sur le temps nécessaire pour les former à votre ensemble de données spécifique par rapport à leur précision. Bien qu'il n'y ait pas de réponse universelle, mais j'ai trouvé lors de l'utilisation de données bruyantes, les SVM prennent beaucoup plus de temps à s'entraîner qu'un ensemble soigneusement construit de modèles de régression régularisés, mais peuvent être légèrement plus précis dans les performances; et un réseau de neurones bien construit peut prendre beaucoup de temps à s'entraîner par rapport à un arbre CART, mais il fonctionne beaucoup plus précisément que l'arbre.
    • Pour réduire le temps nécessaire à la création du modèle, essayez d'automatiser autant de processus que possible. Quelques heures passées à automatiser une tâche manuelle complexe et sujette aux erreurs peuvent permettre à votre équipe d'économiser cent heures plus tard dans le projet.
    • Si disponibles, utilisez les implémentations d'algorithmes qui utilisent un traitement parallèle, des matrices clairsemées et un calcul prenant en charge le cache, elles réduisent considérablement le temps de traitement. Par exemple, utilisez xgboost au lieu d'une implémentation monocœur de GBM.
    • Si rien d'autre ne fonctionne, entraînez le modèle sur un ensemble de données plus petit; comme Emre l'a suggéré dans sa réponse, utilisez des courbes d'apprentissage pour fixer la plus petite taille d'échantillon requise pour la formation du modèle, l'ajout de plus d'enregistrements de formation que cette taille n'améliore pas sensiblement la précision du modèle. Voici un bon article qui explore cette situation - http://web.mit.edu/vondrick/largetrain.pdf .

Merci @Sandeep pour votre réponse exhaustive. En ce qui concerne le point n ° 3 énumérant l'ensemble de données dans les lignes et les colonnes et la taille de la mémoire de la matrice numérique finale, pourriez-vous développer davantage? Est-ce que cela signifie trouver la taille de votre ensemble de données propre à l'aide de syntaxes, telles que «df.values.nbytes», «df.shape» dans le cadre de données pandas? Merci.
iLoeng

Utilisation: df.values.nbytes + df.index.nbytes + df.columns.nbytes
Sandeep S. Sandhu

4

La question est, combien de données faut-il pour saturer votre modèle? Pour déterminer cela, vous pouvez tracer des courbes d'apprentissage avec différentes quantités de données, peut-être en augmentant / diminuant la taille d'un facteur constant. Si la formation sur toutes les données n'est pas possible, la courbe d'apprentissage peut vous aider à faire un compromis éclairé.

La saturation du modèle entre également en jeu avec la validation croisée. Si vous n'êtes pas près de la saturation, l'utilisation d'un petit nombre de plis vous donnera des performances pessimistes car vous entraînerez votre modèle sur moins de données qu'il ne peut en utiliser.

Enfin et inversement, vous pouvez utiliser un modèle plus complexe au lieu de «redimensionner» les données en fonction du modèle.

Bienvenue sur DataScience.SE.

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.