Quel algorithme ? Quel approche\méthodo à choisir ?

machine learning \ Apprentissage \ BigData \

a marqué ce sujet comme résolu.

Bonjour tout le monde :) ! Je suis nouvelle sur le site et aussi en machine learning.

J’ai une problématique et j’aurai besoin de votre aide.

La voici : J’ai un jeux de test étiqueté par plusieurs personnes avec deux valeurs soit 0 ou 1. Avec une vingtaine de variables. Le problème est que je ne sais pas sur quel critère on a attribué 0 ou 1. La seule information dont je dispose est que les observations ayant l’étiquetage 0 sont justes mais on a un doute sur le 1.

Comment identifier sur quel critère on a attribué 0 ? Et appliqués par la suite les critères\Paramètres (Variables) obtenues sur les observations ayant l’étiquetage = 1 afin de vérifier si cet étiquetage est correcte ou pas.

Quel est l’algorithme qui peut m’aider à d’abord identifier ces critère ?

J’espère avoir été claire :) et surtout d’avoir poster ce message au bon endroit.

+0 -0

Hello, juste pour te dire que ton sujet aurait plus sa place dans le forum programmation. Je vais le signaler à la modération pour qu’elle le déplace ^^

Mais bienvenue ici, et bonne chance pour ton problème, je vais laisser quelqu’un de plus adapté répondre à ton problème ^^

+1 -0

Nazih ?

Je suis pas sur de bien avoir compris ton problème. Tu as un jeu de test, chaque vecteur est en fait composé d’une vingtaine de valeurs. Sur chaque vecteur, en se basant sur certaines valeurs du vecteur, on a étiqueté les vecteurs par 0 ou 1. Toi tu voudrais vérifié que l’étiquetage est cohérent, pour cela, tu ne sais pas sur quoi se sont basés les personnes ayant fait l’étiquetage mais tu sais que un vecteur a été étiqueté par 0 alors l’étiquetage est bon ?

J’ai bien compris ?

Notamment, si un vecteur est en double et a été une étiqueter en 0 alors si le deuxième a été étiqueter en 1, c’est une erreur.

+1 -0

C’est exact ! Vous m’avez bien compris.

"Notamment, si un vecteur est en double et a été une étiqueter en 0 alors si le deuxième a été étiqueter en 1, c’est une erreur." La logique est bonne mais uniquement dans le cas ci-dessous :

  • Obs1 : 1 , 2 , 3 , 4 ……20 —> 0
  • Obs2 : 1 , 2 , 3 , 4 ……20 —> 0
  • Obs3 : 1 , 2 , 3 , 4 ……20 —> 1

Etant donné que les étiquetage à 0 ils sont tours corrects alors on déduit que que l’observation N°3 est incorrecte.

Mais ce raisonnement ne fonctionne pas pour le cas ci-dessous :

  • Obs1 : 1 , 0 , 3 , 1 ……20 —> 0
  • Obs2 : 0 , 5 , 2 , 4 ……20 —> 0
  • Obs3 : 0 , 9 , 2 , 5 ……20 —> 1

C’est juste impossible … Non ? Faut il penser à une classification ? en se concentrant uniquement sur les vecteurs étiquetés à 0 ?

+0 -0

Non ça ne me semble pas impossible d’obtenir un test correcte. Obtenir un truc exacte par-contre me semble difficile dans le cas général effectivement.

Mais ce n’est pas mon truc du tout. Je peux seulement t’orienter vers des idées. D’autres sur le site sont meilleurs que moi en statistique et pourront te conseil d’autres méthodes au cour de la journée/semaine.

Un 0 est un vecteur étiqueté à 0. De même un 1 est un vecteurs étiqueté à 1.

Une idée naïve c’est de prendre tous les 0 comme un groupe (ou une partie significative des 0). De chercher une norme qui soit minimale pour 0. Si à partir d’un certain seuil E\Epsilon tu as une partie significative des 0 qui ont une norme inférieur à E\Epsilon et une parti significative des 1 qui ont une norme supérieur à E\Epsilon alors déjà ce sera pas mal du tout. En gros, c’est calculer une sorte de centre du nuage de points des 0 et voir si tu trouves une norme qui s’approche de l’enveloppe convexe du nuage de point.

Une autre idée, c’est de calculer la variance du groupe des 0 sur chacune des composantes. Si tu as des composantes à variance faible alors elles sont très discriminantes. Tu peux ensuite directement discriminer un 1 par ses valeurs sur ces composantes, si elles sont trop éloigné, ça veut dire que c’est bien un 1. Sinon, c’est peut-être un 0.

Tu peux te renseigné sur des méthodes comme ADL, l'ACP.

À ta place je me plongerais dans un livre/cours de statistiques, ça risque de te servir pour ce projet.

Bonne chance \o

+0 -0

Bonjour,

Voici une première solution potentielle avec du machine learning en utilisant un modèle facile à interpréter : les forêts aléatoires. On sépare les données en deux : un ensemble d’entraînement, un ensemble de validation. À partir de l’ensemble d’entraînement, on crée aléatoirement mais intelligemment beaucoup d’arbres de décision qui se basent simplement sur les valeurs des composantes du vecteur en y fixant des seuils pour décider de la classe. Pour décider ensuite de la classe à attribuer à un nouveau vecteur jamais rencontré de l’ensemble de validation, on fait un vote majoritaire entre les résultats obtenus par chacun des arbres. En évaluant les performances sur l’ensemble de validation, tu sauras si le critère est suffisamment simple pour être représentable avec des arbres de décision (ce n’est pas forcément le cas et il faudra peut-être alors chercher une autre solution). En observant a posteriori les arbres qui se trompent le moins souvent, tu peux identifier les composantes et les seuils qui séparent au mieux ton ensemble. Attention, pendant la phase de validation, il faudra se rappeler qu’un vecteur classé 0 par ton modèle alors qu’il était étiqueté 1 peut être un résultat correct. Et puisque tu apprends avec des données potentiellement mal étiquetées, il faudra espérer que les erreurs seront suffisamment peu abondantes pour qu’elles restent du bruit sans perturber l’entraînement.

Côté mise en pratique, la bibliothèque scikit-learn avec le RandomForestClassifier est un outil clé en main qui saura faire tout cela : tu pourras séparer ton ensemble de données avec train_test_split (par exemple 80% entraînement / 20% validation), paramétrer le modèle au moment de la construction (combien d’arbres de décision générer, quelle profondeur maximale pour les arbres…), générer les arbres à partir de l’ensemble d’entrainement avec la méthode fit, valider sur l’ensemble de validation avec la méthode score. Il faudra valider différemment les données étiquetées 0 et les données étiquetées 1 étant donné tes circonstances : idéalement, si ton but est de déterminer le critère exact et que celui-ci est exactement identifié par ta forêt, tu auras 100% sur les 0 mais pas tout à fait sur les 1 et tu pourras identifier les mauvais étiquetages. Je rappelle cependant que ton critère est peut-être trop compliqué pour être identifié par une forêt aléatoire mais tu tireras peut-être quand même des pistes de tout ça si tu le mets en place.

Edit: C’est avant la séparation entraînement/validation qu’il faut s’assurer que chaque vecteur n’apparaît qu’une fois et avec le meilleur étiquetage possible (garder 0 s’il y a au moins un étiquetage 0, garder 1 s’il n’y a que des étiquetages 1).

+1 -0

Hello Dentuk ! J’essaye tout ca demain et vous tiens au courant ! Cela sera mon premier modèle….je risque de mettre plus de temps … Je vais essayer sur DataIku avant de passer par Python… Je vous tiens au courant

Mille merci de votre reponse ! :)

Bonjour,

Les méthodes évoquées sont plutôt bonnes (vote de la forêt, généralisation d’un nuage de points). J’ajouterai à cela du Deep Learning : créer des couches d’observations afin de d’identifier les critères qui permettent d’affirmer que ton vecteur est étiqueté 0. Au final n’est-ce pas ça le besoin ? Outre la nécessité de vérifier l’étiquetage, ce serait bien mieux que plus tard, tu puisses valider automatiquement les étiquettes, non ? :)

Un bon article sur le sujet : https://medium.com/@CharlesCrouspeyre/comment-les-réseaux-de-neurones-à-convolution-fonctionnent-b288519dbcf8

Yarflam ! Merci de votre réponse. DeepLearning ? Ça sonne trop compliqué à mon niveau de débutante…. Mais à regarder …je veux avoir le maximum d’idées …et j’ai l’envie de tout tester …maintenant est ce que je serai dans la capacité de tout tester ? A suivre ? Mais promis …je vous donnerai de mes nouvelles.

Merciis :)

"créer des couches d’observations afin de d’identifier les critères qui permettent d’affirmer que ton vecteur est étiqueté 0. Au final n’est-ce pas ça le besoin ?"

Comment ?

Nazih

Justement avec les réseaux à convolutions (cf le lien que j’ai partagé sur le Deep Learning). Ce mécanisme permet d’identifier des motifs qui permettront ensuite à la couche entièrement connectée (= réseaux de neurones classique à rétropropagation) d’identifier l’étiquette. Je te conseille la chaîne Youtube de Sentdex pour en apprendre plus (notamment ses vidéos sur la détection d’objets depuis une source vidéo ou un jeu -> une IA dans GTA).

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte