Classification discriminatoire à une classe avec un fond négatif déséquilibré et hétérogène?

16

Je travaille sur l'amélioration d'un classifieur supervisé existant, pour classer les séquences {protéine} comme appartenant à une classe spécifique (précurseurs des hormones neuropeptidiques), ou non.

Il y a environ 1 150 «positifs» connus, sur un fond d'environ 13 millions de séquences de protéines («fond inconnu / mal annoté»), ou environ 100 000 protéines pertinentes examinées, annotées avec une variété de propriétés (mais très peu annotées de manière explicite manière "négative").

Mon implémentation précédente a considéré cela comme un problème de classification binaire: ensemble positif = protéines marquées comme neuropeptides. Ensemble négatif: échantillonnage aléatoire de 1 300 échantillons (total) parmi les protéines restantes d'une distribution à peu près similaire en longueur.

Cela a fonctionné, mais je veux améliorer considérablement les capacités discriminatoires des machines (actuellement, c'est à environ 83-86% en termes de précision, AUC, F1, mesurée par CV, sur plusieurs ensembles négatifs échantillonnés au hasard).

Mes pensées étaient de: 1) En faire un problème multiclasse, en choisissant 2-3 classes différentes de protéines qui seront définitivement négatives, par leurs propriétés / classe fonctionnelle, avec (peut-être) un autre ensemble échantillonné au hasard. (La priorité ici serait les ensembles négatifs qui sont similaires dans leurs caractéristiques / caractéristiques à l'ensemble positif, tout en ayant des caractéristiques définissantes). 2) Apprentissage en classe - Ce serait bien, mais si je comprends bien, il est destiné uniquement à la détection d'anomalies et a de moins bonnes performances que les approches discriminatoires.

*) J'ai entendu parler de l'apprentissage PU, ce qui semble bien, mais je suis un N00b de programmation, et je ne connais aucune implémentation existante pour cela. (En Python / sci-kit, apprenez).

Alors, l'approche 1 a-t-elle un sens dans un PDV théorique? Existe-t-il un meilleur moyen de créer plusieurs ensembles négatifs? (Je pourrais aussi simplement utiliser une sélection massive [50K] de protéines "négatives", mais elles sont toutes très très différentes les unes des autres, donc je ne sais pas dans quelle mesure le classificateur les traiterait comme un grand mélange non équilibré ). Merci!

GrimSqueaker
la source
comme vous l'avez probablement vu, l'article de Wikipédia sur l'apprentissage des PU fait référence à un article où cela a été appliqué à l'identification des gènes. Peut-être que cela vaut la peine de comprendre / demander aux auteurs quel logiciel ils ont utilisé.
Andre Holzner
Il y a une discussion sur l'apprentissage PU dans scikit learn here: stackoverflow.com/questions/25700724/… (en utilisant une machine à vecteur de support 'one class')
Andre Holzner
L'apprentissage PU est un problème de classification standard à deux classes avec une mise en garde - vous optimisez la zone sous la courbe, pas la précision de la classification. Vous pouvez utiliser le progiciel Sofia ML pour accomplir exactement cela (aucune programmation requise). Sur le plan pratique, vous annotez vos exemples positifs avec +1 et tout le reste comme -1 (oui, toutes les autres données non étiquetées qui peuvent contenir des positifs).
Vladislavs Dovgalecs

Réponses:

5

La manière dont j'attaquerais le problème, en général, consiste à tirer parti de l'analyse statistique comme l'analyse des composants principaux ou les moindres carrés ordinaires pour aider à déterminer quels attributs au sein de ces séquences protéiques sont les mieux adaptés pour classer les protéines en tant que précurseurs de l'hormone neuropeptidique.

Pour ce faire, vous devrez convertir les séquences protéiques en données numériques, mais je crois qu'un certain travail a déjà été fait à cet égard en utilisant des formules exploitées dans l'Acide aminé PCA.

Voir ces deux liens: http://www.ncbi.nlm.nih.gov/pubmed/24496727

http://www.ncbi.nlm.nih.gov/pubmed/16615809

Une fois ce travail terminé, j'essaierais de classer en utilisant l'ensemble de données complet et un algorithme d'apprentissage par renforcement, comme Naive Bayes, tout en réduisant les données en celles que PCA a identifiées comme importantes.

La raison pour laquelle j'essaierais d'utiliser Bayes est qu'il s'est avéré être l'une des meilleures méthodes pour déterminer le spam par rapport au courrier électronique ordinaire, qui a un ensemble de données asymétrique similaire.

Cela dit, tout cela ...

Réduire le nombre ou le type de classifications négatives peut fausser vos résultats d'une manière ou d'une autre, mais je ne pense pas que l'efficacité à long terme changera considérablement jusqu'à ce que vous fassiez le travail de jambe pour déterminer la meilleure façon de supprimer le flou de vos données d'entraînement. Cela nécessitera soit un expert sur le terrain, soit une analyse statistique.

Je pourrais être complètement hors de la base. Je suis intéressé à voir d'autres réponses, mais c'est mes 2 cents.

Steve Kallestad
la source
1
J'ai déjà implémenté l'extraction de fonctionnalités et une boîte à outils pour cela (la publication attend une vérification de bogue).
GrimSqueaker
5

Apprentissage en une classe

Je ne serais pas trop rapide pour rejeter les méthodes de classification à une classe (option 2) - la clé est de modéliser la classe positive (minoritaire) avec le modèle à une classe.

Des recherches ont démontré des cas où la classification d'une classe a surpassé d'autres approches comme l'échantillonnage de données très déséquilibrées, comme on le voit souvent avec les tâches de classification des protéines.

Je n'ai pas pu trouver les recherches dont je me souvenais, mais j'ai trouvé d'autres comparaisons, montrant que l'utilisation de classificateurs à une classe (modélisant généralement la classe minoritaire) avait des performances aussi bonnes ou meilleures que la classification binaire, généralement avec des «négatifs» échantillonnés du grand ensemble de protéines non connues pour être positives.

De plus, cette approche offre également l'avantage d'une durée d'exécution nettement améliorée - puisque vous n'avez besoin de former le classifieur que sur l'ensemble plus petit et positif. Quelques papiers:

"Prédiction des interactions protéine-protéine en utilisant des méthodes de classification d'une classe et en intégrant diverses données biologiques"

"Une approche de classification d'une classe pour les séquences et les structures des protéines"

À tout le moins, j'essaierais des méthodes à une classe et comparerais les performances à l'aide de la validation avec vos approches de classification binaire / multi-classes. Il existe également des implémentations open source pour beaucoup d'entre elles, il ne devrait donc pas être trop coûteux de les essayer, par exemple LibSVM a une implémentation SVM à une classe. De plus, il pourrait s'avérer utile pour une utilisation dans un ensemble avec des classificateurs binaires, car il pourrait y avoir plus de désaccord dans leurs prédictions.

Incorporation / clustering de représentation de niveau supérieur

Dans la lignée de ce que vous pensiez (1) et de l'autre article suggérant l'ACP, des approches telles que le clustering, le codage épars ou même la modélisation de sujets - traitant chaque protéine comme une chaîne de documents et différentes familles de protéines comme différents sujets - pourraient donner une représentation cela pourrait rendre la classification des protéines simple.

C'est-à-dire que vous pouvez identifier à quel groupe / cluster une protéine appartient ou classer les appartenances au cluster / les représentations intégrées.

Par exemple, des approches d'intégration telles que le codage clairsemé peuvent produire des représentations qui révèlent également à quel cluster appartient une protéine - de sorte que certains ensembles de caractéristiques ne sont actifs (non nuls) que pour les protéines du même cluster - ce qui peut faciliter leur classification.

De plus, les étiquettes de classe ou l'appartenance à un cluster connu peuvent être incorporées dans le processus d'intégration pour la plupart des méthodes.

Ensemble

Les ensembles de classificateurs multiples fonctionnent généralement mieux, en particulier lorsque les classificateurs sont très divers et peuvent atteindre des performances comparables individuellement.

Il existe au moins deux façons d'utiliser des ensembles pour ce problème.

  1. Vous pouvez créer un ensemble de classificateurs binaires en échantillonnant plusieurs ensembles négatifs différents de même taille et en formant un classificateur sur chacun.
  2. Vous pouvez créer un ensemble à partir de différentes approches, telles que des classificateurs binaires avec différents échantillons négatifs, combinés à une approche de classification à une classe, combinés à des modèles de classification formés sur les données incorporées.
Brian
la source
2

Vous pouvez adopter trois approches: APP, OAA, AAO. APP est une discrimination entre les objets basée sur toutes les paires de classes possibles. OAA est l'utilisation d'un contre tous (classes restantes) et AAO est tout à la fois comme l'utilisation d'un test F pour plusieurs classes simultanément (ou le test de Hotelling pour MVN). APP et AAO sont en fait de multiples exécutions de classification binaire, mais avec plus de deux de vos classes d'origine. Chacune de ces approches donne des résultats différents pour les différents classificateurs utilisés.

L'échantillonnage aléatoire est une bonne technique. Vous pouvez également essayer de regrouper tous les objets en centres à l'aide de k-means, puis d'utiliser les centres comme nouveaux objets. Dans les deux cas, les méthodes de réduction des dimensions linéaires et non linéaires pourraient aider à s'éloigner de la grande taille de l'échantillon.


la source