Méthodes d'ensemble. Extrait du livre

image

Bonjour, Khabrozhiteli, nous avons remis à l'imprimerie un nouveau livre , Machine Learning: Algorithms for Business . Voici un extrait sur les méthodes d'ensemble, son but est d'expliquer ce qui les rend efficaces, et comment éviter les erreurs courantes qui conduisent à leur mauvaise utilisation en finance.

6.2. Trois sources d'erreur


Les modèles MO souffrent généralement de trois erreurs .

1. Biais: cette erreur est causée par des hypothèses irréalistes. Lorsque le biais est élevé, cela signifie que l'algorithme MO n'a pas pu reconnaître les relations importantes entre les traits et les résultats. Dans cette situation, il est dit que l'algorithme est "non approuvé".

2. Dispersion: cette erreur est causée par la sensibilité à de petits changements dans le sous-ensemble d'entraînement. Lorsque la variance est élevée, cela signifie que l'algorithme est sur-ajusté au sous-ensemble d'apprentissage, et donc même des changements minimes dans le sous-ensemble d'apprentissage peuvent produire des prédictions très différentes. Au lieu de modéliser des modèles généraux dans un sous-ensemble d'apprentissage, l'algorithme prend par erreur du bruit pour le signal.

3. Bruit: cette erreur est causée par la dispersion des valeurs observées, telles que des changements imprévisibles ou des erreurs de mesure. Il s'agit d'une erreur fatale qui ne peut être expliquée par aucun modèle.

image

Une méthode d'ensemble est une méthode qui combine de nombreux élèves faibles, qui sont basés sur le même algorithme d'apprentissage, dans le but de créer un élève (plus fort) dont les performances sont meilleures que celles de chacun des élèves. Les techniques d'ensemble aident à réduire le biais et / ou la dispersion.

6.3. Agrégation d'amorçage


L'ensachage (agrégation), ou agrégation d'échantillons bootstrap, est un moyen efficace de réduire la variance des prévisions. Il fonctionne comme suit: premièrement, il est nécessaire de générer N sous-ensembles d'apprentissage de données en utilisant un échantillonnage aléatoire avec retour. Deuxièmement, adapter N évaluateurs, un pour chaque sous-ensemble de formation. Ces évaluateurs sont ajustés indépendamment les uns des autres, par conséquent, les modèles peuvent être ajustés en parallèle. Troisièmement, la prévision d'ensemble est une moyenne arithmétique simple des prévisions individuelles de N modèles. Dans le cas des variables catégorielles, la probabilité qu'une observation appartienne à une classe est déterminée par la part des évaluateurs qui classent cette observation comme membre de cette classe (par vote majoritaire, c'est-à-dire par vote majoritaire). Lorsque l'évaluateur de base peut faire des prédictions avec la probabilité de prédiction, le classificateur ensaché peut obtenir la valeur moyenne des probabilités.

Si vous utilisez la classe baggingClassifier de la bibliothèque sklearn pour calculer la précision des non-paquets, vous devez connaître ce défaut: https://github.com/scikit-learn/scikitlearn/issues/8933 . Une solution consiste à renommer les étiquettes dans un ordre séquentiel entier.

6.3.1. Réduction de la dispersion


Le principal avantage de l'ensachage est qu'il réduit la variance des prévisions, contribuant ainsi à résoudre le problème du sur-ajustement. La variance de la prédiction ensachée (φi [c]) est fonction du nombre d'évaluateurs ensachés (N), de la variance moyenne de la prédiction effectuée par un évaluateur (σ̄) et de la corrélation moyenne entre leurs prédictions (ρ̄):

image

le bootstraping séquentiel (chapitre 4) consiste à prélever des échantillons aussi indépendants que possible, réduisant ainsi ρ̄, ce qui devrait réduire la dispersion des classificateurs ensachés. Dans la fig. 6.1, nous avons tracé le diagramme de l'écart-type de la prédiction ensachée en fonction de N ∈ [5, 30], ρ̄ ∈ [0, 1] et σ̄ = 1.

image

6.3.2. Précision améliorée


Considérons un classificateur ensaché, qui fait des prédictions sur k classes par un vote majoritaire parmi N classificateurs indépendants. Nous pouvons désigner des prédictions comme {0,1}, où 1 signifie une prédiction correcte. La précision du classificateur est la probabilité p de marquer la prédiction comme 1. En moyenne, nous obtenons Np prédictions marquées comme 1 avec une variance de Np (1 - p). Le vote majoritaire fait la bonne prédiction lorsque la classe la plus prévisible est observée. Par exemple, pour N = 10 et k = 3, le classificateur ensaché a fait la bonne prédiction lorsqu'il a été observé

image

image

Listing 6.1. La justesse du classificateur en sac

from scipy.misc import comb N,p,k=100,1./3,3. p_=0 for i in xrange(0,int(N/k)+1): p_+=comb(N,i)*p**i*(1-p)**(Ni) print p,1-p_ 

C'est un argument fort en faveur de l'ensachage de tout classifieur dans le cas général, lorsque les capacités de calcul le permettent. Cependant, contrairement au boosting, l'ensachage ne peut pas améliorer la précision des classificateurs faibles:

image

Pour une analyse détaillée de ce sujet, il est conseillé au lecteur de se reporter au théorème du jury Condorcet. Bien que ce théorème ait été obtenu aux fins du vote majoritaire en science politique, le problème abordé par ce théorème a des caractéristiques communes avec celui décrit ci-dessus.

6.3.3. Redondance des observations


Au chapitre 4, nous avons examiné l'une des raisons pour lesquelles les observations financières ne peuvent pas être considérées comme réparties également et indépendantes les unes des autres. Des observations excessives ont deux effets néfastes sur l'ensachage. Premièrement, les échantillons prélevés avec retour sont plus susceptibles d'être presque identiques, même s'ils n'ont pas d'observations communes. Cela fait image et l'ensachage ne réduira pas l'écart, quel que soit N. Par exemple, si chaque cas à t est marqué conformément à un rendement financier entre t et t + 100, nous devons sélectionner 1% des cas par évaluateur en sac, mais pas plus. Dans le chapitre 4, section 4.5, trois solutions alternatives sont recommandées, dont l'une définissait max_samples = out ['tW']. Mean () dans l'implémentation de la classe de classificateur ensaché dans la bibliothèque sklearn. Une autre (meilleure) solution était l'application de la méthode de sélection séquentielle de bootstrap.

Le deuxième effet néfaste de la redondance d'observation est que la précision des paquets supplémentaires sera gonflée. Cela est dû au fait que l'échantillonnage aléatoire avec échantillonnage renvoie aux échantillons du sous-ensemble de formation qui sont très similaires à ceux en dehors du package. Dans ce cas, la validation croisée de bloc k stratifiée correcte sans mélange avant la division montrera une précision beaucoup moins grande sur le sous-ensemble de test que celle qui a été évaluée en dehors du package. Pour cette raison, lors de l'utilisation de cette classe de bibliothèque sklearn, il est recommandé de définir stratifiedKFold (n_splits = k, shuffle = False), de recouper le classificateur ensaché et d'ignorer les résultats de la précision des non-paquets. Un k faible est préférable à un k élevé, car une sur-division placera à nouveau des motifs dans le sous-ensemble de test qui sont trop similaires à ceux utilisés dans le sous-ensemble d'apprentissage.

6.4. Forêt aléatoire


Les arbres de décision sont bien connus en ce qu'ils ont tendance à sur-ajuster, ce qui augmente la variance des prévisions. Afin de résoudre ce problème, une méthode de forêt aléatoire (RF) a été développée pour générer des prévisions d'ensemble avec une variance plus faible.

Une forêt aléatoire présente des similitudes communes avec l'ensachage dans le sens de la formation indépendante d'évaluateurs individuels sur des sous-ensembles de données bootstrapés. La principale différence avec l'ensachage est qu'un deuxième niveau de caractère aléatoire est intégré dans les forêts aléatoires: lors de l'optimisation de chaque fragmentation nodale, seul un sous-échantillon aléatoire (sans retour) d'attributs sera évalué afin de décorréler davantage les évaluateurs.

Comme l'ensachage, une forêt aléatoire réduit la variance des prévisions sans surajustement (rappelez-vous que jusqu'à). Le deuxième avantage est qu'une forêt aléatoire évalue l'importance des attributs, dont nous discuterons en détail au chapitre 8. Le troisième avantage est qu'une forêt aléatoire fournit des estimations de la précision hors emballage, mais dans les applications financières, elles sont susceptibles d'être gonflées (comme décrit dans Section 6.3.3). Mais comme pour l'ensachage, une forêt aléatoire ne présentera pas nécessairement un biais plus faible que les arbres de décision individuels.

Si un grand nombre d'échantillons est redondant (pas également répartis et indépendants les uns des autres), il y aura toujours un réajustement: l'échantillonnage aléatoire avec retour construira un grand nombre d'arbres presque identiques (), où chaque arbre de décision est surajusté (un inconvénient en raison de la notoriété des arbres de décision). . Contrairement à l'ensachage, une forêt aléatoire définit toujours la taille des échantillons de bootstrap en fonction de la taille du sous-ensemble de données d'apprentissage. Voyons comment nous pouvons résoudre ce problème de ré-ajustement des forêts aléatoires dans la bibliothèque sklearn. À des fins d'illustration, je ferai référence aux classes de bibliothèque sklearn; cependant, ces solutions peuvent être appliquées à n'importe quelle implémentation:

1. Définissez le paramètre max_features sur une valeur inférieure pour obtenir une différence entre les arbres.

2. Arrêt anticipé: définissez le paramètre de régularisation min_weight_fraction_leaf sur une valeur suffisamment grande (par exemple, 5%) pour que la précision hors paquet converge vers la correction hors échantillon (k-block).

3. Utilisez l'évaluateur BaggingClassifier sur l'évaluateur de base DecisionTreeClassifier, où max_samples est défini sur l'unicité moyenne (avgU) entre les échantillons.

  • clf = DecisionTreeClassifier (critère = 'entropie', max_features = 'auto', class_weight = 'symétrique')
  • bc = BaggingClassifier (base_estimator = clf, n_estimators = 1000, max_samples = avgU, max_features = 1.)

4. Utilisez l'évaluateur BaggingClassifier sur l'évaluateur de base RandomForestClassifier, où max_samples est défini sur l'unicité moyenne (avgU) entre les échantillons.

  • clf = RandomForestClassifier (n_estimators = 1, critère = 'entropie', bootstrap = faux, class_weight = 'balancé_sous-échantillon')
  • bc = BaggingClassifier (base_estimator = clf, n_estimators = 1000, max_samples = avgU, max_features = 1.)

5. Modifiez la classe de forêt aléatoire pour remplacer les amorces standard par des amorces séquentielles.

Pour résumer, l'extrait 6.2 montre trois façons alternatives de configurer une forêt aléatoire en utilisant différentes classes.

Listing 6.2. Trois façons de configurer une forêt aléatoire

 clf0=RandomForestClassifier(n_estimators=1000, class_weight='balanced_ subsample', criterion='entropy') clf1=DecisionTreeClassifier(criterion='entropy', max_features='auto', class_weight='balanced') clf1=BaggingClassifier(base_estimator=clf1, n_estimators=1000, max_samples=avgU) clf2=RandomForestClassifier(n_estimators=1, criterion='entropy', bootstrap=False, class_weight='balanced_subsample') clf2=BaggingClassifier(base_estimator=clf2, n_estimators=1000, max_samples=avgU, max_features=1.) 

Lors de l'ajustement d'arbres de décision, la rotation de l'espace d'entité dans la direction coïncidant avec les axes, en règle générale, réduit le nombre de niveaux nécessaires pour l'arbre. Pour cette raison, je suggère que vous ajustiez un arbre aléatoire sur la PCA des attributs, car cela peut accélérer les calculs et réduire légèrement le réajustement (plus à ce sujet au chapitre 8). De plus, comme décrit au chapitre 4, section 4.8, l'argument class_weight = 'balancé_sous-échantillon' aidera à empêcher les arbres de classer incorrectement les classes minoritaires.

6.5. Boost


Kearns et Valiant [1989] ont été parmi les premiers à demander si des évaluateurs faibles pouvaient être combinés afin de réaliser la réalisation d'un évaluateur très précis. Peu de temps après, Schapire [1990] a montré une réponse affirmative à cette question en utilisant une procédure que nous appelons aujourd'hui boosting (boosting, boosting, amplification). D'une manière générale, cela fonctionne comme suit: tout d'abord, générer un sous-ensemble d'apprentissage par sélection aléatoire avec retour en fonction de certains poids d'échantillon (initialisés par des poids uniformes). Deuxièmement, adapter un évaluateur à l'aide de ce sous-ensemble de formation. Troisièmement, si un évaluateur unique atteint une précision dépassant le seuil d'acceptabilité (par exemple, dans un classificateur binaire, il est de 50% pour que le classificateur fonctionne mieux que la diseuse de bonne aventure), alors l'évaluateur reste, sinon il est rejeté. Quatrièmement, accordez plus de poids aux observations mal classées et moins de poids aux observations correctement classées. Cinquièmement, répétez les étapes précédentes jusqu'à ce que N évaluateurs soient reçus. Sixièmement, la prévision d'ensemble est la moyenne pondérée des prévisions individuelles de N modèles, où les poids sont déterminés par la précision des évaluateurs individuels. Il existe un certain nombre d'algorithmes boostés, dont le boosting adaptatif AdaBoost est l'un des plus populaires (Geron [2017]). La figure 6.3 résume le flux de décision dans l'implémentation standard de l'algorithme AdaBoost.

image

6.6. Bagging vs Finance Boosting


D'après la description ci-dessus, plusieurs aspects rendent le boosting complètement différent de l' ensachage :

  • L'ajustement des classificateurs individuels est effectué séquentiellement.
  • Les classificateurs pauvres sont rejetés.
  • À chaque itération, les observations sont pondérées différemment.

La prévision d'ensemble est la moyenne pondérée des élèves individuels.

Le principal avantage de la stimulation est qu'elle réduit à la fois la variance et le biais dans les prévisions. Néanmoins, une correction du biais se produit en raison d'un risque accru de sur-ajustement. On peut affirmer que dans les applications financières, l'ensachage est généralement préférable à l'augmentation. L'ensachage résout le problème de sur-ajustement, tandis que le boosting résout le problème de sur-ajustement. Le surapprentissage est souvent un problème plus grave que le sous-ajustement, car l'ajustement trop serré de l'algorithme MO aux données financières n'est pas du tout difficile en raison du faible rapport signal / bruit. De plus, l'ensachage peut être parallélisé, tandis que le boost nécessite généralement une exécution séquentielle.

6.7. Ensachage pour l'évolutivité


Comme vous le savez, certains algorithmes MO populaires ne se mettent pas très bien à l'échelle en fonction de la taille de l'échantillon. La méthode des machines à vecteurs de support (SVM) en est un excellent exemple. Si vous essayez de faire correspondre l'évaluateur SVM à plus d'un million d'observations, la convergence de l'algorithme peut prendre un certain temps. Et même après sa convergence, rien ne garantit que la solution est un optimum global ou qu'elle ne sera pas réalignée.

Une approche pratique consiste à construire un algorithme ensaché où l'évaluateur de base appartient à une classe qui ne s'adapte pas bien à la taille de l'échantillon, comme SVM. En définissant cet évaluateur de base, nous introduisons une condition stricte pour un arrêt précoce. Par exemple, dans l'implémentation des machines à vecteurs de support (SVM) dans la bibliothèque sklearn, vous pouvez définir une valeur faible pour le paramètre max_iter, par exemple, les itérations 1E5. La valeur par défaut est max_iter = -1, ce qui indique à l'évaluateur de continuer l'itération jusqu'à ce que les erreurs tombent en dessous du niveau de tolérance. D'un autre côté, vous pouvez augmenter le niveau de tolérance avec le paramètre tol, qui est par défaut tol = iE-3. Chacune de ces deux options entraînera un arrêt anticipé. Vous pouvez arrêter rapidement d'autres algorithmes en utilisant des paramètres équivalents, tels que le nombre de niveaux dans une forêt aléatoire (max_depth) ou la fraction pondérée minimale de la somme totale des poids (tous les échantillons d'entrée) devant se trouver sur un nœud feuille (min_weight_fraction_leaf).

Étant donné que les algorithmes ensachés peuvent être parallélisés, nous transformons une grande tâche séquentielle en une série de plus petits qui sont exécutés simultanément. Bien sûr, un arrêt précoce augmentera la variance des résultats des évaluateurs de base individuels; cependant, cette augmentation peut être plus que compensée par la diminution de la variance associée à l'algorithme ensaché. Vous pouvez contrôler cette réduction en ajoutant de nouveaux évaluateurs de base indépendants. Utilisé de cette manière, l'ensachage vous permet d'obtenir des estimations rapides et robustes sur de très grands ensembles de données.

»Plus d'informations sur le livre sont disponibles sur le site Web de l'éditeur
» Contenu
» Extrait

25% de réduction pour les livres de précommande Khabrozhiteley sur un coupon - Machine Learning

Source: https://habr.com/ru/post/fr445780/


All Articles