Comment choisir les bonnes options de test lors de l'évaluation des algorithmes d'apprentissage automatique
Les options de test que vous utilisez lors de l'évaluation des algorithmes d'apprentissage automatique peuvent faire la différence entre un surapprentissage, un résultat médiocre et un résultat de pointe utilisable que vous pouvez criez avec assurance depuis les toits (on a vraiment envie de faire ça parfois).
Dans cet article, vous découvrirez les options de test standard que vous pouvez utiliser dans votre harnais de test d'évaluation d'algorithme et comment choisir les bonnes options la prochaine fois.
Le hasard
La racine de la difficulté à choisir les bonnes options de test est le caractère aléatoire. La plupart (presque tous) des algorithmes d’apprentissage automatique utilisent le hasard d’une manière ou d’une autre. Le caractère aléatoire peut être explicite dans l'algorithme ou peut être dans l'échantillon de données sélectionné pour entraîner l'algorithme.
Cela ne signifie pas que les algorithmes produisent des résultats aléatoires, mais plutôt qu’ils produisent des résultats avec un certain bruit ou une certaine variance. Nous appelons ce type de variance limitée, stochastique et les algorithmes qui l'exploitent, algorithmes stochastiques.
Entraîner et tester sur les mêmes données
Si vous disposez d'un ensemble de données, vous souhaiterez peut-être entraîner le modèle sur l'ensemble de données, puis rapporter les résultats du modèle sur cet ensemble de données. C’est dire à quel point le modèle est bon, n’est-ce pas ?
Le problème avec cette approche d'évaluation des algorithmes est que vous connaîtrez effectivement les performances de l'algorithme sur l'ensemble de données, mais n'aurez aucune indication sur la façon dont l'algorithme fonctionnera sur des données sur lesquelles le modèle n'a pas été formé (ce que l'on appelle les données invisibles). ).
Cela n'est important que si vous souhaitez utiliser le modèle pour faire des prédictions sur des données invisibles.
Test fractionné
Un moyen simple d’utiliser un ensemble de données pour entraîner et estimer les performances de l’algorithme sur des données invisibles consiste à diviser l’ensemble de données. Vous prenez l'ensemble de données et le divisez en un ensemble de données d'entraînement et un ensemble de données de test. Par exemple, vous sélectionnez au hasard 66 % des instances pour l'entraînement et utilisez les 34 % restants comme ensemble de données de test.
L'algorithme est exécuté sur l'ensemble de données d'entraînement et un modèle est créé et évalué sur l'ensemble de données de test et vous obtenez une précision de performance, disons une précision de classification de 87 %.
Les tests Spit sont rapides et efficaces lorsque vous disposez de beaucoup de données ou lorsque la formation d'un modèle coûte cher (en ressources ou en temps). Un test fractionné sur un très très grand ensemble de données peut produire une estimation précise des performances réelles de l’algorithme.
Quelle est la qualité de l’algorithme sur les données ? Pouvons-nous affirmer avec certitude qu’il peut atteindre une précision de 87 % ?
Un problème est que si nous crachons à nouveau l'ensemble de données d'entraînement dans une répartition différente de 66 %/34 %, nous obtiendrons un résultat différent de celui de notre algorithme. C'est ce qu'on appelle la variance du modèle.
Tests fractionnés multiples
Une solution à notre problème avec le test fractionné obtenant des résultats différents sur différentes fractions de l'ensemble de données consiste à réduire la variance du processus aléatoire et à le faire plusieurs fois. Nous pouvons collecter les résultats d'un bon nombre d'exécutions (disons 10) et prendre la moyenne.
Par exemple, disons que nous avons divisé notre ensemble de données 66 %/34 %, que nous avons exécuté notre algorithme et obtenu une précision et que nous l'avons fait 10 fois avec 10 répartitions différentes. Nous pourrions avoir 10 scores de précision comme suit : 87, 87, 88, 89, 88, 86, 88, 87, 88, 87.
La performance moyenne de notre modèle est de 87,5, avec un écart type d'environ 0,85.
Un problème avec plusieurs tests fractionnés est qu'il est possible que certaines instances de données ne soient jamais incluses pour la formation ou les tests, alors que d'autres peuvent être sélectionnées plusieurs fois. L’effet est que cela peut fausser les résultats et ne pas donner une idée significative de la précision de l’algorithme.
Validation croisée
Une solution au problème consistant à garantir que chaque instance est utilisée pour l'entraînement et les tests un nombre égal de fois tout en réduisant la variance d'un score de précision consiste à utiliser cross validation. Plus précisément, la validation croisée k-fold, où k est le nombre de divisions à effectuer dans l'ensemble de données.
Par exemple, choisissons une valeur de k=10 (très courant). Cela divisera l'ensemble de données en 10 parties (10 plis) et l'algorithme sera exécuté 10 fois. Chaque fois que l'algorithme est exécuté, il sera entraîné sur 90 % des données et testé sur 10 %, et chaque exécution de l'algorithme modifiera les 10 % des données sur lesquelles l'algorithme est testé.
Dans cet exemple, chaque instance de données sera utilisée comme instance de formation exactement 9 fois et comme instance de test 1 fois. La précision ne sera pas une moyenne ni un écart type, mais plutôt un score de précision exact du nombre de prédictions correctes qui ont été faites.
La méthode de validation croisée k-fold est la méthode incontournable pour évaluer les performances d'un algorithme sur un ensemble de données. Vous souhaitez choisir des valeurs k qui vous offrent un ensemble de données d'entraînement et de test de bonne taille pour votre algorithme. Pas trop disproportionné (trop grand ou trop petit pour une formation ou un test). Si vous disposez de beaucoup de données, vous devrez peut-être recourir à un échantillonnage des données ou revenir à un test fractionné.
La validation croisée donne une estimation impartiale des performances de l'algorithme sur des données invisibles, mais que se passe-t-il si l'algorithme lui-même utilise le caractère aléatoire. L'algorithme produirait des résultats différents pour les mêmes données d'entraînement à chaque fois qu'elles seraient entraînées avec une graine de nombre aléatoire différente (début de la séquence de pseudo-aléatoire). La validation croisée ne tient pas compte de la variance dans les prédictions de l’algorithme.
Un autre point de préoccupation est que la validation croisée elle-même utilise le caractère aléatoire pour décider comment diviser l'ensemble de données en k plis. La validation croisée n'estime pas les performances de l'algorithme avec différents ensembles de plis.
Cela n'a d'importance que si vous souhaitez comprendre la robustesse de l'algorithme sur l'ensemble de données.
Validation croisée multiple
Un moyen de prendre en compte la variance dans l'algorithme lui-même consiste à exécuter une validation croisée plusieurs fois et à prendre la moyenne et l'écart type de la précision de l'algorithme à chaque exécution.
Cela vous donnera une estimation des performances de l'algorithme sur l'ensemble de données et une estimation de la robustesse (la taille de l'écart type) des performances.
Si vous avez une moyenne et un écart type pour l'algorithme A et une autre moyenne et un autre écart type pour l'algorithme B et qu'ils diffèrent (par exemple, l'algorithme A a une précision plus élevée), comment savoir si la différence est significative ?
Cela n'a d'importance que si vous souhaitez comparer les résultats entre les algorithmes.
Importance statistique
Une solution pour comparer les mesures de performances des algorithmes lors de l'utilisation de plusieurs exécutions de validation croisée k-fold consiste à utiliser la signification statistique tests (comme le test t de l'étudiant).
Les résultats de plusieurs exécutions de validation croisée k-fold sont une liste de nombres. Nous aimons résumer ces chiffres en utilisant la moyenne et l’écart type. Vous pouvez considérer ces chiffres comme un échantillon d’une population sous-jacente. Un test de signification statistique répond à la question : deux échantillons sont-ils issus de la même population ? (aucune différence). Si la réponse est « oui », alors, même si la moyenne et les écarts types diffèrent, on peut dire que la différence n’est pas statistiquement significative.
Nous pouvons utiliser des tests de signification statistique pour donner un sens aux différences (ou à leur absence) entre les résultats de l'algorithme lors de l'utilisation de plusieurs exécutions (comme plusieurs exécutions de validation croisée k fois avec différentes graines de nombres aléatoires). Cela peut se produire lorsque nous voulons faire des déclarations précises sur les résultats (l'algorithme A était meilleur que l'algorithme B et la différence était statistiquement significative)
Ce n’est pas la fin de l’histoire, car il existe différents tests de signification statistique (paramétriques et non paramétriques) et paramètres pour ces tests (valeur p). Je vais tracer une ligne ici car si vous m'avez suivi jusqu'ici, vous en savez maintenant suffisamment sur la sélection des options de test pour produire des résultats rigoureux (publiables !).
Résumé
Dans cet article, vous avez découvert la différence entre les principales options de test disponibles lors de la conception d'un harnais de test pour évaluer les algorithmes d'apprentissage automatique.
Plus précisément, vous avez découvert l'utilité et les problèmes liés à :
- Formation et tests sur le même ensemble de données
- Tests fractionnés
- Tests fractionnés multiples
- Validation croisée
- Validation croisée multiple
- Importance statistique
En cas de doute, utilisez la validation croisée k fois (k=10) et utilisez plusieurs séries de validation croisée k fois avec des tests de signification statistique lorsque vous souhaitez comparer de manière significative les algorithmes de votre ensemble de données.