Comment comparer statistiquement deux algorithmes à travers trois ensembles de données dans la sélection et la classification d'entités?


8

Contexte du problème: Dans le cadre de mes recherches, j'ai écrit deux algorithmes qui peuvent sélectionner un ensemble de fonctionnalités à partir d'un ensemble de données (données d'expression génique de patients cancéreux). Ces caractéristiques sont ensuite testées pour voir dans quelle mesure elles peuvent classer un échantillon invisible comme cancéreux ou non cancéreux. Pour chaque exécution de l'algorithme, une solution (un ensemble de fonctionnalités) est générée et testée sur Z échantillons invisibles. Est calculé en pourcentage de précision de la solution comme ceci: (correct classifications / Z) * 100.

J'ai deux algorithmes: l'algorithme X et l'algorithme Y

J'ai trois ensembles de données distincts (différents cancers): ensemble de données A, ensemble de données B et ensemble de données C. Ces ensembles de données sont très différents les uns des autres. Ils n'ont pas le même nombre d'échantillons ou le même nombre de mesures (caractéristiques) par échantillon.

J'ai exécuté chaque algorithme 10 fois sur chaque ensemble de données. Ainsi, l'algorithme X a 10 résultats de l'ensemble de données A, 10 de l'ensemble de données B et 10 de l'ensemble de données C. Globalement, l'algorithme X a 30 résultats.

Mon problème: je voudrais voir si les performances combinées de l'algorithme X dans les trois ensembles de données sont statistiquement significativement différentes des performances combinées de l'algorithme Y.

Est-il possible pour moi de combiner les résultats de l'algorithme X de chaque ensemble de données en un seul ensemble de résultats? De cette façon, j'aurais 30 résultats standardisés pour l'algorithme X et 30 résultats standardisés pour l'algorithme Y. Je peux ensuite utiliser le test t pour voir s'il y a une différence significative entre les deux méthodes.

Modifier - Ce sont des algorithmes évolutionnaires, ils renvoient donc une solution légèrement différente à chaque exécution. Cependant, s'il y a une fonctionnalité dans un échantillon qui, lorsqu'elle est présente, peut fortement classer l'échantillon comme étant cancéreux ou non cancéreux, alors cette fonctionnalité sera sélectionnée presque chaque fois que l'algorithme est exécuté.

Je reçois légèrement différents résultats pour chacun des 10 pistes pour les raisons suivantes:

  • Ces algorithmes sont répartis aléatoirement.
  • J'utilise une validation de sous-échantillonnage aléatoire répétée (10 répétitions).
  • Les ensembles de données que j'utilise (puces à ADN et protéomique) sont très difficiles à travailler dans le sens où il existe de nombreux optima locaux dans lesquels l'algorithme peut rester coincé.
  • Il y a beaucoup d'interactions inter-fonctionnalités et inter-sous-ensembles que je voudrais détecter.
  • J'entraîne 50 chromosomes et ils ne sont pas limités à une longueur particulière. Ils sont libres de croître et de rétrécir (bien que la pression de sélection les guide vers des longueurs plus courtes). Cela introduit également des variations dans le résultat final.

Cela dit, l'algorithme sélectionne presque toujours un sous-ensemble particulier de fonctionnalités!

Voici un échantillon de mes résultats (seulement 4 exécutions sur 10 pour chaque algorithme sont affichées ici):

Jeu de données / exécution Algorithme X Algorithme Y
A 1 90,91 90,91
A 2 90,91 95,45
A 3 90,91 90,91
A 4 90,91 90,91

B 1 100 100
B 2 100 100
B 3 95,65 100
B 4 95,65 86,96

C 1 90,32 87,10
C 2 70,97 80,65
C 3 96,77 83,87
C 4 80,65 83,87

Comme vous pouvez le voir, j'ai rassemblé les résultats de deux algorithmes de trois ensembles de données. Je peux faire un test de Kruskal-Wallis sur ces données mais sera-t-il valide? Je pose cette question car:

  • Je ne suis pas sûr que les précisions dans les différents ensembles de données soient comparables. S'ils ne le sont pas, les rassembler comme je l'ai fait n'aurait aucun sens et tout test statistique effectué sur eux serait également vide de sens.
  • Lorsque vous assemblez des précisions de cette manière, le résultat global est susceptible de valeurs aberrantes. Les excellentes performances d'un algorithme sur un ensemble de données peuvent masquer ses performances moyennes sur un autre ensemble de données.

Je ne peux pas non plus utiliser le test t dans ce cas, c'est parce que:

  • Commensurabilité - le test t n'a de sens que lorsque les différences entre les ensembles de données sont proportionnées.
  • Le test t nécessite que les différences entre les deux algorithmes comparés soient distribuées normalement, il n'y a aucun moyen (du moins que je sache) de garantir cette condition dans mon cas.
  • Le test t est affecté par des valeurs aberrantes qui faussent les statistiques du test et diminuent la puissance du test en augmentant l'erreur standard estimée.

Qu'est-ce que tu penses? Comment puis-je faire une comparaison entre l'algorithme X et Y dans ce cas?


Vos algorithmes impliquent-ils une sorte d'aléatoire, ou pourquoi les exécutez-vous 10 fois chacun sur chaque ensemble de données?
Stephan Kolassa

Oui! Ce sont des algorithmes évolutionnaires (algorithmes stochastiques). Donc, à chaque fois, ils produisent un résultat différent. Cependant, s'il existe des caractéristiques fortes (gènes / une seule valeur à partir d'un échantillon), alors elles sont sélectionnées le plus souvent. Le but de l'algorithme est de sélectionner les gènes qui sont fortement corrélés à une classe particulière (par exemple le cancer de l'ovaire) afin qu'ils puissent être utilisés dans le diagnostic précoce / la prédiction du cancer à l'avenir.
revolusions

Réponses:


8

À moins que vos algorithmes présentent d'énormes différences de performances et que vous ayez un grand nombre de cas de test, vous ne pourrez pas détecter les différences en regardant simplement les performances.

Cependant, vous pouvez utiliser une conception appairée:

  • exécuter les trois algorithmes sur exactement la même répartition train / test d'un ensemble de données, et
  • ne regroupez pas les résultats du test en% correct, mais conservez-les au niveau du cas de test unique comme correct ou faux.

Pour la comparaison, jetez un œil au test de McNemar . L'idée derrière l'exploitation d'une conception appariée ici est que tous les cas où les deux algorithmes se sont bien comportés et ceux qui se sont tous deux trompés ne vous aident pas à distinguer les algorithmes. Mais si un algorithme est meilleur que l'autre, il devrait y avoir de nombreux cas où le meilleur algorithme a eu raison mais pas le pire, et quelques-uns qui ont été prédits correctement par la pire méthode mais faux par le meilleur.

Aussi, Cawley et Talbot: Sur le sur-ajustement dans la sélection du modèle et les biais de sélection ultérieurs dans l'évaluation des performances, JMLR, 2010, 1, 2079-2107. est très pertinent.

En raison des aspects aléatoires de vos algorithmes, vous souhaiterez également vérifier plusieurs fois la même division du même ensemble de données. À partir de cela, vous pouvez estimer la variation entre différentes séries qui sont par ailleurs égales. Il peut être difficile de juger de la différence entre les ensembles de variables sélectionnés. Mais si votre objectif ultime est la performance prédictive, vous pouvez également utiliser la variation entre les prédictions du même scénario de test pendant différentes exécutions pour mesurer la stabilité des modèles résultants.

Vous voudrez ensuite également vérifier (comme indiqué ci-dessus) la variation due aux différentes divisions de l'ensemble de données et la mettre en relation avec la première variance.

Les fractions (comme les% d'échantillons correctement reconnus) sont généralement supposées être distribuées binomialement , dans certains cas une approximation normale est possible, mais les petits caractères pour cela ne se rencontrent presque jamais dans des champs avec de larges matrices de données. Cela a pour conséquence que les intervalles de confiance sont énormes pour un petit nombre de cas de test. Dans R, binom::binom.confintcalcule les intervalles de confiance pour la vraie proportion étant donné non. de tests et non. de succès.

Enfin, mon expérience avec l'optimisation génétique des données spectroscopiques (ma thèse Diplom en allemand) suggère que vous devriez également vérifier les erreurs de formation. Les GA ont tendance à s'adapter très rapidement, entraînant de très faibles erreurs d'entraînement. Les faibles erreurs de formation sont non seulement trop optimistes, mais elles ont également pour conséquence que l'AG ne peut pas différencier de nombreux modèles qui semblent également parfaits. (Vous pouvez avoir moins de problème avec cela si le GA en interne entraîne également des sous-échantillons aléatoires et des ensembles de tests internes).

Articles en anglais:


Merci pour une excellente analyse! Je vais essayer un design jumelé. Vous êtes sur place concernant le sur-ajustement. La prochaine phase de mes recherches va se concentrer sur l'évitement du sur-ajustement pendant l'entraînement. Ceci est vraiment important car mon objectif final est de produire un algorithme entièrement automatisé afin que les oncologues puissent l'utiliser pour le diagnostic précoce des cancers. Je suis vraiment intéressé à lire votre article mais je crains de ne pas pouvoir lire l'allemand. Veuillez me faire savoir s'il existe une version anglaise. Merci encore pour votre contribution détaillée.
revolusions

@revolusions: Les informations sont un peu réparties sur certains papiers. Mais j'ai ajouté une liste avec 2 sur la sélection des variables GA, et une sur l'incertitude dans la mesure des taux d'erreur de classification. Si vous avez des questions (ou n'avez pas accès aux papiers), envoyez-moi un e-mail.
cbeleites mécontents de SX

Je vous remercie! J'ai réussi à télécharger le dernier article mais je n'arrive pas à obtenir les deux premiers. J'essaierai depuis mon ordinateur universitaire demain et je vous ferai savoir si je parviens à les télécharger.
revolusions

1

Vous exécutez une sélection plus précise avec GA 10 fois et chaque fois que vous obtenez une sortie différente !!

Premièrement, si vous commencez par la même graine, vous devriez toujours obtenir le même sous-ensemble de caractères sélectionné. Cependant, si vous utilisez une graine aléatoire, vous devriez également obtenir presque les mêmes fonctionnalités sélectionnées. Une raison pour obtenir le même featuer sélectionné est indiquée dans votre message. De plus, pour une comparaison équitable, vous pouvez utiliser les mêmes graines dans les séries de A pour les expériences de B.

Deuxièmement, vous pouvez utiliser la validation croisée ou le bootstraping pour la comparaison. De cette façon, vous obtenez une comparaison plus représentative. Dans ce cas, il existe une source de variation, c'est-à-dire des échantillons d'apprentissage aléatoires qui semblent plus forts que les semences aléatoires. Ainsi, la comparaison peut révéler quel algorthim est vraiment meilleur.

Enfin, vous pouvez utiliser le test t comme vous l'avez proposé ou utiliser directement certains tests non paramétriques comme le test de Kruskal-Wallis.


Merci beaucoup pour votre réponse! Je voudrais clarifier certaines choses et peut-être obtenir votre avis après, car je suis toujours confus au sujet de la comparaison, j'espère que vous pourrez aider! Vous avez dit: <blockquote> De plus, pour une comparaison équitable, vous pouvez utiliser les mêmes graines dans les séries de A pour les expériences de B </blockquote> C'est un très bon point, merci. J'ai modifié ma question pour répondre aux points que vous avez soulevés. Ce sera génial si vous pouvez jeter un oeil et me faire savoir ce que vous pensez.
revolusions

Vous pouvez faire une comparaison distincte entre les classificateurs pour chaque ensemble de données. Initialement, vérifiez la moyenne et l'écart type. Si pour tous les jeux de données, un classificateur bat l'autre. Ensuite, nous avons terminé. Sinon, vous pouvez utiliser une idée "d'ensemble". Vérifiez le nouvel échantillon, s'il appartient à l'ensemble de données A, utilisez le meilleur classificateur, etc. Cependant, il pourrait y avoir un test statistique basé sur une vue appariée que je ne connais pas dans ce cas.
soufanom

Merci encore pour votre contribution. J'ai fait ce que vous avez suggéré et il n'y a pas de gagnant clair. C'est pourquoi j'ai décidé de tout assembler et de voir s'il y aurait un gagnant. Cette idée "d'ensemble" semble intéressante. Y a-t-il un endroit où je peux en savoir plus à ce sujet? Merci de votre aide.
revolusions

Encore une chose, pensez à comparer la sensibilité et la spécificité. Pour la source de l'ensemble, consultez le livre joint à mon post stats.stackexchange.com/questions/47075/…
soufanom
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.