# Gnral Dveloppement > Algorithme & Mathmatiques > Traitement d'images >  Comparatifs mthodes de classification images mdicales

## blackmisery

Hello,
j'ai russi  dterminer,  partir d'une image radio (Dicom), si un nez tait fractur ou non et ce en utilisant (aprs isolement du nez) la dimension de Hausdorff. Celle-ci permet de calculer la "rugosit" d'un objet : plus c'est rugueux, plus a a de chance d'tre fractur. Bref, je voudrais comparer cette mthode  d'autres mthodes de classification afin d'en voire le bien fond. 
Je sais que les SVM sont bass sur 2 classes en natif, mais comment vais-je reprsenter le vecteur du nez pour que cela puisse tre pris en considration?
(exemple : ).
Dois-je m'orienter vers d'autres mthodes (Rseau de neurons, Baysiens...), plus simples ou plus complexes qui me permettraient au final de savoir si rellement ce que j'ai fait  prsent est "dfendable" ? 

D'avance merci!

----------


## ToTo13

Bonsoir,

il y a comme toujours deux politiques  ce genre de problme et on donnera une troisime hybride (logique...) :
 - 1 - soit tu te bats sur les caractristiques qui alimentent ton modle de classement.
 - 2 - soit tu travailles sur l'algorithme de classement et/ou la prparation des donnes.

Dans la deuxime, il est souvent prfrable dans un souci de robustesse/validation d'utiliser plusieurs mthodes de classement diffrentes. J'ai un faible (comme la grande majorit) pour dbuter par la rgression logistique qui une mthode linaire. Les SVM et autres rseaux de neurones sont relativement "quivalents" (attention  ce que l'on sous-entend par ce mot) en terme de performances et il y a deux coles qui s'affrontent. Choisis en une des deux et/ou les deux. Sinon tu peux tester les Random Forest (TRES  la mode) et les bon vieux (mais toujours aussi performants) k plus proches voisins.
Toutes les autres mthodes peuvent aussi faire l'affaire, tu trouveras ton bonheurs sous MatLab ou dans Weka.

----------


## blackmisery

Je pense que c'est ok pour moi. Ce que je vais faire c'est crer un fichier avec les donnes suivantes : Primtre | Surface comme attributs, et Fractur / non Fractur comme classe. 
Weka est trs bien pour quelqu'un qui n'a pas envie de se casser la tte  dvelopper  ::mrgreen::  Je vais essayer toutes les mthodes,  la mode ou pas  ::): 
Une dernire question. J'ai une centaine d'chantillons, et je veux bien essayer la notion d'apprentissage. Du coup, j'en choisis quelques uns au hasard et les libelle "chantillons d'apprentissage" puis je teste  chaque fois avec de nouveaux chantillons? C'est bien cela le principe du "training"? Merci!

----------


## ToTo13

Bonjour,

oui, le principe est bien cela, mais inutile d'en slectionner certains !
SI le nombre d'chantillons "casss" est comparable au "non casss" (problme classique du "Imbalanced Data Set") alors tu peux tout donner  weka qui fera lui mme la validation en fonction de ce que tu lui demandes.
D'une manire gnrale, plus on a d'chantillon mieux c'est car au plus on vite l'apprentissage par coeur.

Mais par contre, je trouve que le nombre de caractristiques donnes est vraiment faible :-(
N'y a t'il pas moyen d'en donner plus ?
Est ce que la forme des os casss du nez sont significativement diffrents des non casss ? (des fois cela peut tre subtil).
Je parle de forme, car tu as l'air d'avoir une image binaire comme rsultat et que tu souhaites donner des paramtres de forme.
Dans ces cas l, la texture apporte souvent une information plus pertinente.

----------


## blackmisery

Bonjour Toto13,
Effectivement il s'agit d'une image binaire sur laquelle tester. J'ai deux caractristiques pour l'instant : la superficie / surface (trs simple  calculer, la somme de tous les pixels non noirs  ::): ) et le primtre (bizarre qu'il n'y ait pas de fonction "prcise" sous Matlab).
Concernant les formes, des fois oui il y a une grosse diffrence entre un nez cass et un autre sain. C'est assez rare (2 cas sur 100 en ce qui me concerne), il faut pour cela que le patient se soit compltement cass la figure, au sens propre...Pour les informations de texture, si les images en entre sont toutes en noir et blanc, cela peut-il toujours servir?

Thanks!

----------


## blackmisery

J'ai trouv ce lien fort intressant, qui numre les diffrents types d'attributs : 
http://wiki.jmbanda.com/tiki-index.p...Feature%20List
Je vais en choisir quelques uns en adquation avec mon image (attributs de forme donc) (5 ou 6 je pense que c'est bien), les excuter sous Matlab et partir m'amuser avec mon nouvel ami Weka.

++

----------


## ToTo13

Bonjour,

si tu travailles sur une image binaire, la texture ne donnera RIEN. Par contre, puisque tu as un masque de segmentation, tu pourrais l'utiliser pour simplifier ton image d'origine et ainsi avoir une information texture.

Par contre pour la forme, je suis trs fan des indices de forme (un chapitre complet et la liste est en annexe).
Tu pourrais peut tre commencer par des mthodes simples comme les moments, si les diffrences sont grandes, tu auras des rsultats.
J'avais galement test les descripteurs de Fourier qui donnent parfois de bons rsultats.


Par contre au niveau apprentissage/classement, tu ne pourras absolument rien faire si tu n'as que deux individus dans la classe "cass", c'est beaucoup trop dsquilibr.

----------


## blackmisery

Merci pour le complment d'informations. 
J'ai deux individus dont la forme du nez est trs diffrente des autres. Mais sinon j'ai  peu prs 35 nez fracturs pour 65 nez sains. J'essaie tes mthodes et je reviendrai ici poster les rsultats.

Merci!

----------


## ToTo13

Ok, j'attends les rsultats.
Pour info, il te faudra dupliquer les individus "casss" afin d'quilibrer l'chantillon.

----------


## blackmisery

Hello,
je fais un retour "d'avancement" parce que ce n'tait pas si ais...
J'ai donc 48 nez casss et 52 nez sains. 
Pour les attributs / indices de forme, j'en ai choisi 5 : 
Primtre, Surface, Rectangle englobant, Extension et Solidit (ou convexit).
Je poste ce que j'ai pu faire sous Matlab. C'est trs simple mais j'ai trouv que beaucoup de personnes taient dans le mme cas que moi, du moins sur le net. Peut tre que cela pourrait aider  ::): 
Ce mini programme permet, pour n images donnes (avec un compteur), d'en extraire les diffrentes caractristiques cites prcdemment. 



```

```

Maintenant je vais juste rajouter un export vers .csv pour que ce soit lisible par Weka et partir sur les mthodes de classification.
N'hsitez pas  me corriger si dfaut quelque part. Je reviendrai avec les rsultats de mes tests.

----------


## Aleph69

Bonjour,

pour mettre toutes les chances de ton ct, il pourrait tre intressant de prendre un grand nombre de variables (en gros tout ce qui te semble influer) et slectionner ensuite les variables qui discriminent les nez casss et non casss  l'aide d'une approche statistique.

EDIT : vu la taille de ta base, peut-tre que faire une ACP pour dtecter visuellement les variables influentes serait adquat.

----------


## blackmisery

Bonsoir Aleph69, 
je m'excuse pour ma rponse (trop) tardive. J'ai d chercher comment analyser mes variables via l'ACP (en plus de me documenter sur cette ACP  ::): . Je suis pass par Matlab et plein d'autres logiciels mais au final, le seul qui ait pu rpondre  mes besoins c'est SPSS. J'ai donc pass le test de factorisation (mes variables sont corrles entre elles et peuvent tre factorises) et obtenu les diffrents matrices et graphiques; En suivant de prs les tutoriels pour l'interprtation des rsultats, j'ai conclu que les indices "Solidity" et "Bounding" (celles qui contribuent le plus au premier axe)(soit convexit et enveloppe convexe) sont les seules variables que je devrais utiliser pour la classification avec d'autres mthodes.
Je poste mes rsultats ici : 
http://www.louizi.com/thesis/acp/
Peut tre que tu pourrais me confirmer / infirmer mes conclusions pour passer  l'tape suivante.

Merci!

----------


## blackmisery

Hello,
un peu d'aide par ici serait le bienvenu  ::): 
J'aimerai aussi si c'est possible que l'on m'explique un peu la diffrence entre l'ACP et la sub features selection? S'agit-il du mme raisonnement  suivre? Des mmes rsultats?

Merci pour vos retours!

----------


## Aleph69

Bonjour,

dsol je n'ai pas le temps de regarder en profondeur tes rsultats mais je peux te donner quelques explications qui peuvent t'aider  le faire par toi-mme. Idalement, il faudrait que tu te procures un livre sur l'ACP (achat, bu, ...). 

Il y a une diffrence fondamentale entre la slection de variable (feature selection) et l'extraction de variable (feature extraction). La slection de variable permet d'liminer les variables les moins influentes. L'extraction de variable permet de calculer des variables "artificielles" dont on peut esprer qu'elles soient moins nombreuses que les variables initiales. 

L'ACP fait de l'extraction : elle permet d'exprimer tes variables comme des combinaisons linaires de nouvelles variables (vecteur propres). Cela te permet d'liminer l'information redondante (variables corrles).

Dans le tableau "Variance explique", on te donne l'information contenue dans chaque composante, c'est--dire chaque vecteur propre. La quantit d'information contenu dans une composante correspond au ratio entre la valeur propre qui lui est associe et la somme des valeurs propres de toutes les composantes. Ce qu'il faut que tu regardes c'est le % cumul. Tu te rends compte que les deux premires composantes contiennent environ 92% de l'information. En remplaant tes variables par ces deux composantes tu as donc une perte d'information d'environ 8% ce qui est trs acceptable. Le logiciel a automatiquement slectionn ces deux composantes et a projet tes variables sur les axes correspondants : c'est ce qui correspond au graphique "Diagramme des composantes". Extent, Bounding et Solidity sont corrls positivement avec le premier axe : quand la valeur d'une variable augmente (resp. diminue), celle des autres augmente (resp. diminue) aussi. Cela signifie que tu as une redondance d'information entre Extent, Bounding et Solidity. De mme, les variables Perimeter, Area et Compactness sont corrles avec le second axe. La corrlation entre Perimeter et Area est positive tandis que Compactness est corrle ngativement avec les deux autres : quand Compactness augmente, Perimeter et Area diminuent et rciproquement et inversement. Tu peux aussi voir toutes ces corrlations dans la "Matrice des corrlations".

Ce qui serait intressant de visualiser, c'est la projection de tes individus sur tes axes en les coloriant selon qu'ils ont des nez sains ou casss. Ca doit pouvoir se faire sous spss. Cela te permettra d'identifier les variables qui influent sur ces classes. Je te laisse chercher comment faire a avec le logiciel. Envoie ensuite le graphique et on en discutera.

----------


## blackmisery

Aleph69 tout d'abord merci beaucoup pour ton temps, et surtout la clart de ta rponse. C'est beaucoup plus clair pour moi. 
Concernant le diagramme, j'ai du bidouiller tout seul dans SPSS, tant donn que je dispose d'une version trs rcente et que je n'ai pas russi  comprendre plusieurs chiffres utiliss dans le document (excellent d'ailleurs) que tu m'as pass.

Je poste donc ici le diagramme 

http://www.louizi.com/thesis/acp/acp.html

Je posterai ultrieurement un petit tutoriel pour avoir ce rsultat.

Au plaisir de te lire.

----------


## Aleph69

Bonsoir,

le diagramme que tu as post ne correspond  ce dont je parlais. Il s'agit plutt d'un graphique des projections des individus sur les deux premires composantes. Il s'agit du premier graphique de la section 3.4.2 dans le document que je t'ai indiqu. Quelle version de SPSS utilises-tu?

----------


## blackmisery

Salut Aleph69,
c'est IBM SPSS Statistics 19.
J'ai inscrit les tapes que j'ai suivies ici : 

http://www.louizi.com/thesis/acp/acp.html

Merci!

----------


## Aleph69

En fait, tu as fait un diagramme de dispersion avec les variables initiales de ton problme. Il faut procder autrement.

Il faudrait que tu arrives  rcuprer les coordonnes de tes individus dans l'espace form par les deux premires composantes de ton ACP. Autrement dit, il faut que tu puisse "enregistrer" ces deux composantes comme des variables de ton problme. Le graphique dont je te parle consiste simplement  afficher les individus dans le plan 2D form par les deux composantes. Avec tes variables, cela reviendrait  afficher tes individus dans l'espace  6 dimensions form par tes variables (chaque individu est un vecteur). Bien sr, ce n'est pas possible de visualiser un tel graphique, c'est pour cela qu'on utilise une ACP pour se ramener  deux dimensions (ou trois au pire).

----------


## blackmisery

Salut Aleph69,
cette fois-ci c'est la bonne. Ce n'est pas aussi bien colori que l'exemple que tu m'as pass mais c'est dj a  ::):  
J'ai mis un rcapitulatif grosso modo de ce que j'ai fait. Et j'ai surtout insr les graphiques  la fin.

http://www.louizi.com/thesis/acp/acp2.html

----------


## Aleph69

Bonjour,

c'est bien a! Cela aurait t plus clair avec des couleurs mais bon...  :;): 

Par contre, j'ai honte j'ai omis de te parler d'un truc important et j'ai peur que tu ais oubli de le faire. Il faut ABSOLUMENT normaliser les donnes avant de faire l'ACP. En gnral, on centre et on rduit chaque colonne (chaque variable si tu prfres). On soustrait chaque colonne par sa moyenne et on divise le tout par l'cart-type de cette mme colonne. Ca permet d'viter les effets d'chelle. Par exemple, dans ton cas, tes variables sont exprimes dans des units de mesure diffrentes (m, m, etc) et ca pose un problme parce que les variables qui vont contenir des trs gros coefficients vont tre artificiellement plus influentes que les autres (quand tu soustrais un grand nombre et un petit nombre, la soustraction est proche du grand nombre et l'influence du petit nombre est ngligeable). C'est en particulier vrai quand on calcule des distances euclidiennes parce qu'en plus tout est au carr.

Bref, il faudrait recommencer tout le processus en ayant normaliser pralablement tes donnes avec SPSS.

Je suis sincrement dsol pour le contretemps.

----------


## blackmisery

Salut Aleph69, 
Le courriel de notification a t class dans le spam ...
J'tais venu pour te relancer mais oh surprise  ::):  Et c'tait tout  fait logique que je n'aie pas pens  normaliser mes donnes  :;): 
Donc c'est simple, je prends l'cart-type de chaque colonne. Ensuite
par 


> On soustrait chaque colonne par sa moyenne et on divise le tout


, que veux-tu dire exactement ? Je calcule la moyenne de chaque colonne, puis je prends les valeurs une  une (genre x1 et x2) et je fais (x1 - moyenne) / cart-type ? J'ai jamais t fort en statistiques, ni en maths d'ailleurs...

----------


## Aleph69

Bonsoir,

pour chaque vecteur colonne v=(v1,v2,...vN), N tant le nombre de lignes, tu fais les tapes suivantes :
1. calcul de la moyenne m de v,
2. calcul de l'cart-type s de v,
3. normalisation : vi <- (vi-m)/s pour i allant de 1  N.

J'imagine que SPSS propose dj des outils pour le faire mais je n'en sais rien. Il est mme possible que SPSS normalise les donnes automatiquement quand on fait une ACP mais en cas de doute mieux vaut le faire toi mme.

----------


## blackmisery

Bonsoir Aleph69,
en fin de compte SPSS faisait automatiquement la normalisation des donnes...J'ai fait les calculs moi-mme et j'ai obtenu exactement les mmes rsultats. Bref pour ceux qui utilisent SPSS : (je ne fais pas de pub pour ce logiciel, il est super compliqu  ::): 

Utiliser donc "Analyse > Statistiques descriptives > Descriptives en cochant enregistrer des valeurs standardises dans des variables" sur les variables originales.

Voil. L c'est au point  ::): 

Et merci pour les cours algorithmes : http://algo.developpez.com/cours/

----------


## blackmisery

Aleph69 tu es toujours l?

----------


## Aleph69

Bonjour,

je n'ai pas oubli la discussion, je manque juste un peu de temps en ce moment. La figure que tu obtiens n'est pas trs lisible alors si c'est facile je pense vraiment qu'il serait prfrable d'utiliser des couleurs plutt que des tiquettes (ou alors des formes : des croix pour les sains et des ronds pour les casss par exemple). 

Le graphique F3xF4 n'est pas trs intressant car ces deux axes portent trs peu d'information. Le graphique le plus intressant est F1xF2 en 2D ou F1xF2xF3 en 3D. D'ailleurs, si c'est possible, il serait judicieux d'afficher ce dernier graphe ou alors les deux graphes F1xF3 et F2xF3 pour se faire une inde du nauge 3D (en comparant avec F1xF2).

Je vais donc simplement commenter F1xF2. De manire trs grossire, tu as deux nuages bien spars et 3 nez casss assez isols. Il s'agit peut-tre d'outliers : il faudrait regarder dans la table si ces trois individus ont des valeurs aberrantes pour certaines variables. En ce qui concerne le nuage de droite, il est essentiellement constitu de nez casss : il contient tout de mme un nez sain mais  mon avis c'est un outlier ( vrifier dans la table ou sur un graphe 3D ou pseudo-3D). Il ne faut pas que cela te choque, il y a souvent des erreurs d'tiquetage dans les donnes. Bref, l'axe vertical permet de dissocier les deux nuages et permet donc d'identifier un certain nombre de nez casss (si la valeur de la composante d'un individu sur l'axe est suprieure  un certain nombre, alors le nez de l'individu est cass). En ce qui concerne le deuxime nuage, c'est franchement difficile  lire. Il contient une majorit de nez sains mais j'ai du mal  voir la rpartition des nez casss dans le nuage. L'axe horizontale ne semble pas permettre de dissocier  lui seul les deux types de nez. Il faudrait voir ce que cela donne en 3D et chercher une sparation triviale (linaire par ex).

EDIT : il y a trois conclusions possibles qui me viennent  l'esprit. La premire est qu'il faut prendre les trois premiers axes plutt que les deux premiers (avec la reprsentation 3D on va le voir tout de suite si c'est le cas). La deuxime est que tes variables ne sont pas suffisamment explicatives (dans ce cas, il faut ajouter de nouvelles variables). La troisime est que ton problme est naturellement non-linaire et dans ce cas tu devras comparer ton approche  un algorithme capable d'approcher un tel problme (ce n'est pas ce qui manque mais ils sont difficiles  paramtrer en gnral).

----------


## blackmisery

Hello Aleph69,
je te remercie pour le temps consacr. J'ai chang l'affichage des donnes (en couleurs cette fois  :;):  et ce n'tait pas si vident...) et j'ai mis en place le graphique en 3d plus les 3 autres graphiques (F1xF2, F1xF3 et F2xF3).
Oui pour les nez aberrants, j'ai effectivement un ou deux nez sains si je me rappelle bien qui ressemblent fortement  des nez fracturs et vice versa. Je m'attendais moi-mme  ce rsultat.

J'ai mis les rsultats sur : 

http://www.louizi.com/thesis/acp/acp3.html

J'espre, de moi  toi, que je n'aurai pas  inclure d'autres variables parce que je pense avoir insr la plupart qui me semblaient correspondre  mon cas. 

Merci

----------


## Aleph69

Bonjour,

a priori il n'y a pas de nouvelles variables  ajouter. Il est fort probable que les quelques nez sains dans le nuage des nez casss, et les quelques nez casss dans le nuage des nez sains, soient mal tiquets ou trs litigieux. Donc a priori, ton problme est purement linaire et seul le premier axe suffit  discriminer les nez sains et casss. Pour une publication dans un journal spcialis dans l'apprentissage automatique, ton problme me parat beaucoup trop simple pour esprer tre accept. Mieux vaut insister sur ta mthode de dtection et ventuellement viser un journal plus proche de ton domaine d'application. Si tu souhaites comparer les performances de ton algo avec d'autres classifieurs, tu peux choisir les plus proches voisins, le perceptron ou le svm linaire mais tu ne feras pas mieux qu'eux. Il y a tout ce qu'il faut dans matlab (ou la pattern recognition toolbox) pour la comparaison si tu as ce logiciel  ta disposition (tu gagneras du temps).

----------


## blackmisery

Bonsoir Aleph69,
si je rcapitule bien, pour pouvoir comparer ma mthode avec un autre classifieur, il faudrait arriver au final  reprsenter mes images sous formes de vecteurs (pour les SVM et les KPP par exemple). Ces vecteurs doivent avoir des attributs. Pour ces attributs, je prends les variables qui forment le premier axe de l'ACP (qui sont donc les plus reprsentatives de mes "individus" si j'ai bien suivi),  savoir les composantes 1 et 2 (Extent et Bounding). Et l je peux essayer les diffrents classifieurs soit sous Matlab effectivement, soit sous Weka.

Mon raisonnement est bon?

----------


## Aleph69

Bonsoir,

en fait il te suffit de prendre une des deux variables qui sont (quasi)-colinaires au premire axe. La "meilleure" variable tant celle qui est la plus colinaire au premier axe. Le problme est que ton problme de classification est linaire... donc trivial. En d'autres termes, il suffit de chercher une droite pour sparatrice. Jette un oeil  cette page :
http://fr.wikipedia.org/wiki/Classifieur_lin%C3%A9aire
Les SVMS linaires trouvent des sparatrices par maximisation d'une quantit qu'on appelle la marge, comme c'est expliqu ici :
http://fr.wikipedia.org/wiki/Machine...urs_de_support
Pour rsumer, le classement par machines  vecteurs supports va tre parfait ou presque. Et encore, utiliser les SVMs pour rsoudre ton problme c'est dj craser une mouche avec un marteau... dsol.  ::(: 

Il faudrait que tu trouves un problme plus complexe, c'est--dire fortement non-linaire : visuellement, quand tu projettes sur les composantes d'une ACP, les diffrentes classes doivent tre mlanges sans pouvoir tre spares par une simple droite. Plus la forme de la sparation est complique, plus la non-linarit est forte. Par exemple, avoir une sparation discontinue (c'est--dire que tu as besoin de plusieurs sparations appartenant  des hyperplans diffrents dans l'espace). 

Une faon simple de complexifier un problme est gnralement d'augmenter le nombre de classes (plusieurs types de cassures de nez). A priori, le nombre de variables explicatives devraient aussi augmenter. C'est l que a va commencer  devenir intressant mme avec des SVMs parce que les problmes multiclasses ne sont pas faciles  rsoudre en pratique. Tu verras en faisant des cherches qu'il y a trois stratgies : one-against-one, one-against-all et all-against-all et,  ma connaissance, on ne sait pas bien choisir la meilleure stratgie parmi ces trois approches. Il y a plusieurs autres questions intressantes  se poser quand on conoit un algo :
1. stabilit : un perturbation minime des donnes conduit-elle  de grandes diffrences dans les rsultats?
2. rsistance au bruit : l'ajout de variables corrles ou de bruit (variables correspondant  des chantillons alatoires uniformment distribus) affecte-t-elle les performances du classifieur et dans quelle mesure?
3. complexit temporelle (nombre d'oprations  effectuer)
4. complexit spatiale (quantit de mmoire  stocker pour l'apprentissage)

Pour te donner une ide du gouffre qu'il y a entre ton problme et les recherches qui sont menes aujourd'hui (et encore c'est pas rcent et il y a bien pire), regarde par exemple les tailles des bases de donnes ici :
http://clopinet.com/isabelle/Projects/NIPS2003/
Le nombre de variables est trs important par rapport au nombre d'exemples et la plupart des variables ne servent  rien (non discriminatives).

Bref, pour l'instant, je ne vois pas trop comment tu pourrais faire quelque chose de ta mthode vu le problme. Mme dans une petite confrence de data mining tu risques de te faire jeter. Peut-tre que dans des confrences/journaux plus applicatifs (par exemple en mdecine) tu auras un meilleur accueil.

Bien sr, ce n'est qu'un avis personnel, rien ne t'empche d'essayer!  :;):

----------


## blackmisery

Bonsoir Aleph69,
je te remercie pour toutes ces explications. En fait, quand j'ai pris ce sujet, je savais qu'il y avait deux possibilits qui justifient qu'il y ait peu de travaux dans le domaine du nez : soit que c'est trs simple, soit que c'est trop complexe et en d'autres termes "in-modlisables".

Je t'avoue que le fait de parvenir  extraire l'os propre du nez  partir d'une image radio de type DICOM m'a pris un temps fou. Et j'ai tellement perfectionn cet algorithme que je suis quasi-certain d'obtenir des rsultats trs proches du 100% de reconnaissance grce  la distance de Hausdorff. Maintenant, aprs avoir t dans deux confrences d'extraction de connaissances, la question qui se rptait tait : pourquoi cet algorithme bizarre et non une mthode connue de classification. 

J'ai donc voulu donner un peu de lgitimit  ce que j'ai fait en esprant que les autres classifieurs ne donnent pas de bons rsultats. Sachant que je me suis bas non plus sur les images originales, mais sur les os propres du nez que j'ai extraits pour calculer les diffrentes caractristiques.

Il est vrai que 6 caractristiques par rapport aux 100000 et quelques des exemples que tu m'as donns, cela frise le ridicule  ::):  Mais au moins je peux dire que voil, j'ai essay des mthodes connues et j'ai le mme rsultat, donc je peux continuer  travailler en paix. 

J'ai dj fait des recherches sur les SVM, mais vu que la marge est  95% si ce n'est plus trs claire, je n'en vois plus l'utilit, ni pour un autre classifieur.

Je crois que dsormais je peux me focaliser sur la comparaison entre les images. Le but tant de faire de l'image mining : j'obtiens deux images pour un mme patient : avant cassure et aprs. J'essaie de voir ce qui a chang et je dveloppe derrire un raisonnement du type : 

Si fracture X, alors 40 % de chances que ce soit soignSi fracture Y, alors 25% de chances que ce ne soit jamais soign...

Je me suis permis de te faire un topo sur ce que j'ai fait jusqu' prsent pour avoir quelques conseils. Et non je ne dmoralise pas, au moins je sais que, quelques parts, je suis entrain d'avancer et surtout de comprendre de nouvelles notions. Jusque l totalement inconnues pour moi  ::):

----------


## Aleph69

Bonjour,

ta mthode ne doit pas ncessairement tre remise en cause, ce sont plutt tes donnes. As-tu besoin de pr-tiqueter tes images pour ton algorithme? En d'autres termes, as-tu besoin de dire explicitement quels nez sont sains et quels nez sont casss pour un nombre d'images? En fait, as-tu besoin d'une base d'apprentissage tiquet? J'ai l'impression que ton algorithme n'est pas supervis... ce qui serait une diffrence majeure par rapport  des classifieurs. Cela voudrait dire que tu fais du clustering, ou de l'apprentissage non-supervis si tu prfres. Dans ce cas, a n'a pas de sens de comparer ta mthode avec des classifieurs.




> Pourquoi cet algorithme bizarre et non une mthode connue de classification?


Si ton algo est non-supervis, la rponse  cette question est vidente : parce qu'il est non supervis. Plus besoin d'tiqueter  la main et donc a cote moins cher.




> j'obtiens deux images pour un mme patient : avant cassure et aprs. J'essaie de voir ce qui a chang et je dveloppe derrire un raisonnement du type : 
> Si fracture X, alors 40 % de chances que ce soit soign 
> Si fracture Y, alors 25% de chances que ce ne soit jamais soign...


Donc tu as plusieurs types de fractures??? C'est dommage de ne pas les prendre en compte : c'est pour cela que ton problme est simple.

----------


## blackmisery

Bonjour Aleph69,
Le but du travail est de montrer que c'est possible de dvelopper un algorithme qui permet de dtecter si un nez est cass ou non. Le tout de manire automatique, donc non supervise. J'ai donc pris des images dont le cas est connu, et appliqu le dit algorithme. J'ai mis les tiquettes uniquement pour la comparaison.

La comparaison, justement, entre mdecins / algorithme s'est avre fort encourageante, puisque ce dernier permet d'obtenir de meilleurs rsultats. 

Ce que j'ai fait consistait surtout  isoler les os propres du nez  partir d'une image complexe; Ensuite  priori n'importe quel algorithme de classification pouvait tre appliqu. 

J'ai utilis la dimension de Hausdorff pour mon cas, et je voulais voir si d'autres algorithmes pouvaient faire leurs preuves, en mieux. Cela ne justifierait pas le recours  l'ACP puis  d'autres classifieurs? 

Pour ce qui est du type de fractures, c'tait parmi quelques ides que j'ai nonces tout haut; Pour tre franc, l'os propre du nez, vu sa taille, ne peut comporter que des fractures superficielles, dont la taille peut varier. Je crois que c'est plus intressant de raisonner sur la taille que sur autre chose pour pouvoir faire de l'image mining. Je suis encore entrain de rflchir  tout a. Si tu as des propositions, je suis preneur  ::):

----------


## Aleph69

Bonsoir,




> J'ai utilis la dimension de Hausdorff pour mon cas, et je voulais voir si d'autres algorithmes pouvaient faire leurs preuves, en mieux. Cela ne justifierait pas le recours  l'ACP puis  d'autres classifieurs?


L'ACP sert surtout  analyser les problmes en visualisant la distribution des donnes multidimensionnelles et  extraire des variables artificielles pertinentes. Dans ton cas, il me semble prfrable de conserver tes variables de dpart pour deux raisons :
1. l'acp a montr qu'une seule variable (je ne sais plus laquelle) suffisait  discriminer les nez,
2. les experts (mdecins) auront plus de facilit  interprter les rsultats si les variables ont un sens pour eux (je ne connais pas bien les mdecins mais j'imagine qu'ils ne sont pas trs  l'aise avec les vecteurs propres).





> Pour ce qui est du type de fractures, c'tait parmi quelques ides que j'ai nonces tout haut; Pour tre franc, l'os propre du nez, vu sa taille, ne peut comporter que des fractures superficielles, dont la taille peut varier. Je crois que c'est plus intressant de raisonner sur la taille que sur autre chose pour pouvoir faire de l'image mining. Je suis encore entrain de rflchir  tout a. Si tu as des propositions, je suis preneur


En fait, il y a deux types de mthodes de classification : les gnratives et les discriminantes. Les gnratives supposent que le groupe des nez sains et et le groupe casss suivent chacun une loi de probabilit qui leur est propre. Ca permet d'obtenir des modles probabilistes. Le modle gnratif classique est le classifieur baysien naf. Les modles discriminatifs ne supposent rien du point de vue de la distribution et se contenteront de sparer au mieux les sains des casss (avec un modle polynomial par exemple). Ces modles ne sont pas probabilistes mais on peut les modifier pour qu'ils attribuent un "score"  chaque exemple. Ce score est interprt comme une probabilit en divisant chaque score par la somme des scores (pour que la somme des nouveaux scores vale 1 comme pour des probas). Les modles discriminatifs populaires : les rseaux de neurone (en particulier le perceptron multicouche ou mlp pour multilayer percpetron) et les machines  vecteur support ou svm pour support vector machines.

Comme tu t'en doutes, c'est trs difficile de faire une introduction aux algorithmes de classement dans un forum. Tu trouveras plein de renseignements sur le web mais, par exprience, je te conseille plutt de lire des livres. Personnellement, je trouve le livre suivant trs pdagogique :
[ame="http://www.amazon.com/Pattern-Classification-2nd-Richard-Duda/dp/0471056693"]Amazon.com: Pattern Classification (2nd Edition) (9780471056690): Richard O. Duda, Peter E. Hart, David G. Stork: Books@@AMEPARAM@@http://ecx.images-amazon.com/images/I/41W9sMCHD9L.@@AMEPARAM@@41W9sMCHD9L[/ame]
Si tu cherches un livre en franais, il y a le livre de Saporta :
[ame="http://www.amazon.fr/Probabilit%C3%A9s-analyses-donn%C3%A9es-statistiques-Gilbert/dp/2710808145/ref=sr_1_1?ie=UTF8&qid=1297800400&sr=8-1"]Probabilit?s, analyses des donn?es et statistiques: Amazon.fr: Gilbert Saporta: Livres@@AMEPARAM@@http://ecx.images-amazon.com/images/I/51TR4TVKS0L.@@AMEPARAM@@51TR4TVKS0L[/ame]
L'auteur est trs connu mais le livre aurait pu tre crit avec plus de soin selon moi. Il prsente toutefois beaucoup de notions intressantes.
Il y a un autre livre en franais :
[ame="http://www.amazon.fr/Data-mining-statistique-d%C3%A9cisionnelle-3%C3%A8me/dp/271080946X/ref=sr_1_1?s=books&ie=UTF8&qid=1297800547&sr=1-1"]Data mining et statistique d?cisionnelle - 3?me Edition: Amazon.fr: St?phane Tuffery: Livres@@AMEPARAM@@http://ecx.images-amazon.com/images/I/51nyuLorcGL.@@AMEPARAM@@51nyuLorcGL[/ame]
Je ne le connais pas mais beaucoup semblent l'apprcier.

Normalement, ton labo devrait te payer des bouquins si tu en fais la demande. Le premier livre est certes en anglais mais il est vraiment bien.

----------


## blackmisery

Bonsoir Aleph69,
Merci pour tous ces claircissements. Pour rcapituler : Si l'ACP a dmontr que mes nez pouvaient tre discrimins selon une seule variable, cela veut-il dire qu'il vaille mieux utiliser mes 6 variables pour les modles de classification gnratifs soient-ils ou discriminants? 

Enfin, si j'ai bien suivi (je me pencherai sur les livres que tu as mentionns plus tard), ces modles de classification permettront-ils de suivre l'volution d'une image dans le temps? Comme lui affecter un score. Et vrifier les images qui ont un score proche pour juger des changements qui ont eu lieu. 

Exemple : J'ai un patient qui a un nez fractur. Il est class comme tel. Ensuite ce patient va se soigner. Il refait une radio un mois aprs. Classer cette nouvelle image radio me permettra de "dduire" ce qui s'est pass entre temps?

J'espre que j'ai pu clairement expliciter mes penses. N'hsite pas si tu veux que je reformule  ::):

----------


## Aleph69

Si l'ACP a montr qu'une variable suffit  discriminer les nez sains et casss, alors a ne sert  rien de t'occuper des autres variables. Mais entre nous, un modle univari c'est vraiment vraiment vraiment vraiment trop simple. 

Attention tout de mme, je suis parti du principe que certains individus taient mal tiquets : si cela s'avrait ne pas tre le cas, alors le problme ne serait peut-tre plus linaire. 

Si c'est possible, il faudrait faire grossir ta base en demandant d'autres images ou voir avec les mdecins si on peut discerner plusieurs types de fractures pour avoir plus de deux classes.




> Exemple : J'ai un patient qui a un nez fractur. Il est class comme tel. Ensuite ce patient va se soigner. Il refait une radio un mois aprs. Classer cette nouvelle image radio me permettra de "dduire" ce qui s'est pass entre temps?


A priori, je procderai comme suit. Construire une base de donnes ne comportant que des nez fracturs et tiqueter chaque exemple par '0' si le patient n'est pas soign et '1' si c'est soign. Ensuite, avec un modle gnratif probabiliste, ou une mthode discriminative donnant des scores, je prdirais les classes (0 ou 1) des nouveaux patients grce  un apprentissage sur la base de donnes : tu auras la proba ou le score qu'ils soient soigns ou pas selon leur fracture.

Je ne comprends pas ce que tu entends par "ce qui s'est pass entre temps". J'ai peut-tre mal compris ce que tu cherches  faire.

----------


## blackmisery

J'ai des individus mal tiquets parce que justement il y a de toutes petites retouches  rajouter dans mon algorithme pour qu'il distingue "parfaitement" les types. Donc je ne m'en fais pas de ce ct. Je verrai nanmoins avec plus de spcialistes. Peut-tre aurais-je d'autres avis concernant les fractures. 

Tu as par contre bien compris ce que je voulais faire :  partir d'une image, et selon son score, je dtermine la probabilit que le nez sera oui ou non soign. Peut-on gnraliser de cette manire : 

 probabilit X : pas possible de se soigner
 probabilit Y : mdicament M  prendre
 probabilit Z : soign sans problmes
etc.

Et est-ce que cela impliquerait d'avoir toujours les deux images dans la base d'apprentissage ? Les Before & After ? pour pouvoir dterminer ce score ou faut-il juste se baser sur le "After" ?

----------


## Aleph69

On note Xbefore et Xafter les bases de donnes obtenues avant et aprs en extrayant la/les variables des images radios. Voici un exemple de procdure.

1. Appliquer ton algo  Xafter pour dterminer quels sont les nez sains et les nez casss. En sortie, tu obtiens un vecteur y, de longueur le nombre de patients, qui contient 0 ou 1 selon que le patient a un nez sain ou cass.

2. Ajouter y en dernire variable  la base Xbefore : c'est la variable cible et tu te retrouves avec un problme de classement binaire (apprentissage supervis).

3. Construire un classifieur  partir de Xbefore selon une mthode de ton choix qui renvoie une proba ou un score.

4. Pour chaque nouveau patient, tu appliques ton classifieur. Ce classifieur te renverra la proba ou le score qu'il est soignable ou pas (je pars du principe qu'on a appliqu le mme type d'opration  chaque patient sinon a n'a pas de sens).

REMARQUE IMPORTANTE : je ne l'ai pas prcis, mais il faut quand mme valider les performances du classifieur. Vu la taille de ta base, tu n'as pas d'autre choix que de procder  un rchantillonnage (validation croise, bootstrap). Tu peux aussi construire un classifieur ensembliste qui pourra s'auto-valuer et mme slectionner des variables. Par exemple, les forts alatoires.




> Peut-on gnraliser de cette manire : 
>  probabilit X : pas possible de se soigner
>  probabilit Y : mdicament M  prendre
>  probabilit Z : soign sans problmes
> etc.


Non. Si tu veux ce type d'information, il faut d'abord l'extraire  l'tape 1, c'est--dire modifier ton algo pour qu'il puisse te dire si un patient est insoignable, soignable ou soign. Ou alors, avoir une troisime radio aprs mdicament, la radio restant identique si le patient tait dj soign  la deuxime radio. Dans ce cas, ton algo suffira  savoir dans quelle situation tu te trouves (il suffit d'appliquer ton algo aux radios 2 et 3 et de dduire ce qui s'est pass). Dans tous les cas, la base tiquete obtenue  l'tape 2. doit ncessairement comporter les trois tiquettes (0,1 et 2) et pas seulement 0 et 1 pour 'soign' et 'pas soign'.

EDIT : une autre approche consiste  demander aux mdecins d'tiqueter eux-mme les patients en soignable, pas soignable et soign. 

Autre remarque : c'est sans doute cher pour les mdecins de t'tiqueter un nombre important de radios. Dans ce cas, tu peux leur demander de le faire pour un nombre relativement petit de radios mais de t'en filer plein d'autres non tiquetes (ils doivent en voir passer pas mal des radios j'imagine). Alors, tu pourras t'intresser aux mthodes semi-supervises (thme en vogue en ce moment).

Au fait, tu es dans quelle spcialit?

----------


## blackmisery

Merci Aleph69, tu m'as rellement redonn plaisir  travailler sur cette thse. Je suis en spcialit Informatique et je me suis "accidentellement" trouv avec le sujet "Extraction de connaissances  partir d'images mdicales pour la conception d'un outil d'aide  la dcision". J'ai beaucoup galr (manque d'encadrement, aucune connaissance sur les traitements d'images, ni pour les algorithmes de classification..) pour arriver  obtenir ces quelques rsultats. Je ne te cache pas le fait que les mdecins sont orgueilleux par nature, et taient, pour la plupart, trs rticents  vouloir donner un coup de main  "un logiciel qui mettrait en doute leur savoir" (esprons qu'avec la rvolution qu'a connue le pays cela va changer  :;):  

Du coup j'ai pu obtenir une centaine d'images aprs quelques mois et beaucoup d'insistance. Je ne pense plus solliciter leur aide a va  ::aie::  

Par rapport  ta dernire remarque. J'ai en stock des images de patients dont je connais le type : soign, soignable et pas soignable. Une mthode non supervise consisterait  remplacer le classement binaire, soit l'tape 3 de la procdure que tu as mentionne? 

Une question aussi pour la route : XBefore doit tre aussi un vecteur ? Un ensemble de 0 et de 1 auxquels je rajouterai mon Y (des XAfter) ? Et donc la finalit c'est d'appliquer un classifieur au XBefore aprs mise  jour. C'est cela?

----------


## Aleph69

Bonjour,




> J'ai beaucoup galr (manque d'encadrement, aucune connaissance sur les traitements d'images, ni pour les algorithmes de classification..) pour arriver  obtenir ces quelques rsultats.


C'est rassurant, t'es dans la norme (les thsards tant rpartis sur une gaussienne de variance nulle. On prtend qu'il existe des outliers mais c'est srement un mythe...)!  ::aie:: 




> Du coup j'ai pu obtenir une centaine d'images aprs quelques mois et beaucoup d'insistance. Je ne pense plus solliciter leur aide a va


Je connais quelqu'un dans le mme cas que toi avec des ingnieurs : impossible d'obtenir les donnes malgr les relances, travail de deux ans qui n'a mme pas t repris par les ingnieurs, pas d'encadrement, etc. La personne a fini par laisser tomber, a rcupr des bases de donnes ici, et s'est mise  dvelopper des mthodes sans s'occuper des ingnieurs ou de l'application vise. Bilan : enfin des publis, travail tout de suite plus motivant et soutenance pour bientt (au bout de 5 ans quand mme). 




> Par rapport  ta dernire remarque. J'ai en stock des images de patients dont je connais le type : soign, soignable et pas soignable.


Bonne nouvelle! Et si tu fais apparatre trois couleurs diffrentes pour les classes dans l'ACP c'est toujours linaire? N'hsite pas  mettre tous les individus sur le graphique,  l'ACP c'est fait pour a!  :;): 




> Une mthode non supervise consisterait  remplacer le classement binaire, soit l'tape 3 de la procdure que tu as mentionne?


Je ne suis pas sr de comprendre ta question. 
Pourquoi tu veux faire du non-supervis?




> Une question aussi pour la route : XBefore doit tre aussi un vecteur ? Un ensemble de 0 et de 1 auxquels je rajouterai mon Y (des XAfter) ? Et donc la finalit c'est d'appliquer un classifieur au XBefore aprs mise  jour. C'est cela?


Non, non, XBefore est une matrice! Le nombre de lignes est le nombre de patients et le nombre de colonnes est le nombre de variables : le coefficient XBefore(i,j) donne la valeur de la variable j pour le patient i. XBefore et Xafter sont de mme taille : la diffrence c'est que la premire est obtenue  partir de la premire radio de chaque patient alors que la seconde est obtenue  partir de la seconde radio de chaque patient.

En ce qui concerne la variable cible y, tu n'es pas oblig de l'ajouter  XBefore mais c'est en gnral de cette manire qu'on reprsente les bases en apprentissage supervis. 

Flicitations pour la rvolution, en esprant le meilleur!  ::ccool::

----------


## blackmisery

Bonsoir Aleph69,
tout d'abord un grand merci pour tes encouragements. Ce n'est pas du tout facile, et je me demande d'ailleurs ce que faisaient mes prdcesseurs sans forum...

J'ai tiquet mes classes : no1 (cass / soignable) no2 (cass / non soignable) et ok (sain).

J'ai mis les diffrents graphiques  cette adresse 

http://www.louizi.com/thesis/acp/acp4.html

J'ai par contre les deux nez fracturs qui se baladent tous seuls : l'algorithme les a extrait d'une taille trs petite, ce qui fait qu'ils sont loin des autres.
Mais bon a c'est une autre affaire  ::): 

A plus!

----------


## Aleph69

Bonsoir,




> Ce n'est pas du tout facile, et je me demande d'ailleurs ce que faisaient mes prdcesseurs sans forum...


Ca me fait mal de le dire mais ils avaient certainement reus une bien meilleure formation que nous, la slection tait plus rude... et rien ne replacera jamais un bon livre, mme pas internet!  :;): 

Sinon, il faut aussi la table qui fournit l'information cumule porte par les composantes principales (valeurs propres). Ca permet de voir si le graphe 3D contient suffisamment d'information pour tre reprsentatif. 

Il y a les 100 patients l? Tu en as combien par classe?

----------


## blackmisery

::):  
Alors j'ai 50 patients qui ont le nez sain
7 patients qui ont le nez fractur non soignable
et 43 qui ont le nez fractur soignable

Pour la table des valeurs propres, n'est-ce pas celle de la variance totale explique, ici http://www.louizi.com/thesis/acp/ ?

----------


## Aleph69

Bonsoir,

dsol pour les valeurs propres, je n'avais pas remarqu qu'il s'agissait des mmes individus. Tu as un problme trs dsquilibr du fait que l'une des classes est sous-reprsente par rapport aux autres. C'est difficile de juger les rsultats de l'ACP. A priori ce n'est pas linaire mais je suis surpris que les 7 patients non soignables soient aussi disperss. D'o provient cet tiquetage? Il va falloir remdier au problme de dsquilibre de tes patients lors de la phase d'apprentissage. Une solution nave, mais qui fonctionne, consiste  insrer des copies des patients non soignables dans les bases d'apprentissage.

----------


## blackmisery

Hello Aleph69,
L'tiquetage est celui des mdecins. Je vais faire le mnage dans la base d'apprentissage d'ici demain aprs-midi, je rencontre un mdecin qui est suppos me fournir de nouvelles donnes. Je reviendrai ensuite poster les nouveaux rsultats et graphiques.

Je te tiens au courant.

----------


## Aleph69

Excellente nouvelle!

Plusieurs types de donnes peuvent tre utiles :

1. le plus possible de donnes tiquetes en essayant de ne pas avoir de classes trop dsquilibres mais prend tout ce que tu peux obtenir,
2. si il a des donnes non-tiquetes prend les aussi, tu pourras les exploiter pour amliorer le classifieur (semi-supervis),
3. ventuellement plusieurs autres classes si elles existent.

Bonne chance pour demain!  :;):

----------


## blackmisery

Bonjour Aleph69,

alors pour rsumer mon entretien : Il y a en fait plusieurs types de fractures du nez. Mais ces types ne peuvent tre dtermins qu' partir du dossier mdical du patient, qui est sur support papier (encore). Le mot exact serait plutt "gravit" et non "type" par exemple : saignement, craquement des os...Les mdecins reconnaissent l'importance d'une fracture selon le patient (vanouissement, nauses, saignements discontinus etc.) mais il n'y a pas de types prdfinis : "les os propres du nez sont trs petits pour gnraliser".

Le mdecin que j'ai rencontr m'a clairement expliqu que si jamais je voulais associer  chaque fracture son type (donc sa gravit), j'en aurai pour 3 annes de plus, rien qu' chercher les dossiers associs  chaque image radio (certaines sont trs vieilles, d'autres dossiers ont brl durant les grves...). Et voici ce qu'il m'a suggr : 

De me limiter  trois types de nez : un nez sain, un nez soignable et non soignable ( ::ccool:: ). La notion de "non soignable" veut dire ne peut tre soign  court terme (<6 mois) ou ncessite surtout une opration de chirurgie esthtique. Les fractures de ce dernier type sont donc gnralement trs visibles : une grosse cassure dans l'image radio ou bien une discontinuit bizarre. 

Ce que j'ai fait avec ce mdecin, que je remercie, surtout pour ne pas avoir t comme tous les autres, c'tait de reprendre les images que j'avais  disposition, de voir le fonctionnement de mon algorithme en "live" et de commenter les rsultats. 

J'ai donc chang quelques points pour prendre en compte ses remarques, rappliqu l'algorithme sur mes anciennes images, obtenu de nouveaux patients (pas de quoi faire la fte mais c'est dj a  ::):  et voici le rcap : 

- J'ai 15 nez non soignables, 45 nez soignables, 52 nez sains
- J'ai limin 6 nez sains (au hasard), et rajout 2 fois la population des nez non soignables, pour obtenir au final : 
- 45 nez non soignables, 45 nez soignables, 46 nez sains

Je pense que maintenant ce sont des classes assez quilibres. Peut-tre que ce serait bien de faire en sorte que les 6 nez que j'ai limins sont soi-disant non tiquets pour les soumettre  mon prochain challenge (ou ma prochaine dcouverte) : le classifieur semi-supervis.

J'ai donc refait toutes les oprations relatives  l'ACP prcdemment ralises, et j'ai post les rsultats ici : http://www.louizi.com/thesis/acp/acp5.html

J'espre avoir de bonnes nouvelles de ton ct par rapport  cela  ::):

----------


## Nebulix

> rajout 2 fois la population des nez non soignables
> Je pense que maintenant ce sont des classes assez quilibres.


Ou comment transformer une incertitude statistique gnante mais maitrisable en erreur systmatique ...

----------


## Aleph69

Bonsoir




> J'ai limin 6 nez sains (au hasard), et rajout 2 fois la population des nez non soignables, pour obtenir au final :
> 45 nez non soignables, 45 nez soignables, 46 nez sains


L c'est un peu exagr, tu n'as pas besoin d'quilibrer parfaitement les classes. Premirement, ne pas enlever d'information : tu n'en as dj pas beaucoup!  :;):  Donc, tu conserves tes 6 nez sains. Ensuite, au niveau des proportions, on a grosso modo :
13% non soignables
40% soignables
47% nez sains
Au pire, tu ajoutes une copie des non soignables mais pas plus. Pour l'instant, ce n'est pas la peine d'essayer de faire des copies, essaye dj de mettre en place un classifieur avec les donnes telles qu'elles sont. Si c'est vraiment mauvais, tu pourras toujours y palier par la suite. 

Concernant l'ACP, les sains forment un groupe distinct : tu devrais faire de trs bons taux de classement pour cette classes. La sparation entre soignables et non soignables parat moins vidente : il ne reste plus qu' essayer. En premire approche, tu prends tes 6 variables, toutes tes donnes et tu testes un ou plusieurs classifieurs pour voir dj ce que a donne. Pour valuer les performances de l'approche, fais de la validation croise stratifie. Tout doit pouvoir se faire avec Weka aors n'hsite pas  comparer plusieurs algos. Bon courage en attendant les rsultats!

----------


## blackmisery

Bonsoir,
je m'excuse tout d'abord pour ma manipulation grossire des donnes, j'ai cru bien faire. 

J'ai donc mis les donnes initiales en entre. Et j'ai procd  l'excution de quelques classifieurs parmi ceux proposs sur Weka.

Est-ce possible de m'indiquer si c'est bien la manipulation escompte ? 
(http://www.louizi.com/thesis/weka.html)

Thanks

EDIT : Il s'agit bien de l'option validation croise stratifie pour tous les tests effectus

----------


## Aleph69

Bonjour,

a me parat bizarre d'obtenir une matrice de confusion en faisant une validation croise stratifie : il y a un problme quelque part... Il faut vraiment comprendre ce qui se passe parce qu'en testant les mthodes sur les mmes exemples que ceux ayant servi  l'apprentissage tu biaises tous les rsultats. Pour le moment, a ne sert pas  grand chose de commenter tant que ce mystre n'est pas rsolu. En attendant, est-ce qu'il y a des choses que tu ne connais pas dans les tables de rsultat?

----------


## blackmisery

Bonjour Aleph69,
Sur Weka, il suffit d'insrer un fichier Excel et ensuite de choisir le classifieur. J'ai juste coch une option "crossed validation".
Il se pourrait que le tutorial que j'ai eu ne soit pas trs explicite, mais  priori c'est aussi simple que cela : j'ai mis les deux interfaces ici http://www.louizi.com/thesis/weka2.html

Sinon, ce que je n'ai pas trs bien saisir, c'est le rle de ces classifieurs : s'agit-il de poser des chantillons de dpart (mes 112 ou 113 nez) et le classifieur me sort en rsultat la probabilit qu'un futur nez soit reconnu (Les Correctly Classified Instance VS Incorrectly classified Instance). Que suis-je suppos avoir comme rsultat pour dterminer quel serait le meilleur classifieur possible ?

----------


## Aleph69

Bonjour,




> Sur Weka, il suffit d'insrer un fichier Excel et ensuite de choisir le classifieur. J'ai juste coch une option "crossed validation". Il se pourrait que le tutorial que j'ai eu ne soit pas trs explicite, mais  priori c'est aussi simple que cela : j'ai mis les deux interfaces ici http://www.louizi.com/thesis/weka2.html



Je ne peux rien affirmer mais je vais t'expliquer ce qui me choque. La matrice de confusion te donne le nombre d'individu par classe (1 ligne = 1 classe) qui a t class sain, soignable, non-soignable (chaque cas correspondant  une colonne). Ainsi, les classements corrects se trouvent sur la diagonale de la matrice : le nombre en ligne i et colonne i est le nombre d'individus de classe i qui ont t classs i, pour i allant de 1  3). Le principe de la k-validation croise stratifie consiste  dcouper ta base de donnes en k sous-bases exclusives (chaque individu appartient  une seule sous-base) o les proportions des classes sont grossirement respectes (13%, 40%, 47%). Pour i allant de 1  k, on apprend sur la sous-base i et on teste les performances du classifieur sur toutes les autres sous-bases autres que i. Par consquent, un individu est class k-1 fois, soit 9 fois puisque tu sembles avoir pris k=10 (nombre de "folds" dans Weka). 

Le problme est clair : comment tu peux avoir une matrice de confusion sur 112 individus (somme de tous coefficients de la matrice) alors qu'il y a 9*112 classements? 

Si quelqu'un connait la rponse, je suis preneur!  :;): 

N'hsite pas  poster un nouveau message sur ce sujet parce que la question est importante pour toi. Tes futurs rapporteurs de thse ne laisseront pas passer un truc aussi grossier et a remettra en cause la validit de tout ton travail.




> Sinon, ce que je n'ai pas trs bien saisir, c'est le rle de ces classifieurs : s'agit-il de poser des chantillons de dpart (mes 112 ou 113 nez) et le classifieur me sort en rsultat la probabilit qu'un futur nez soit reconnu (Les Correctly Classified Instance VS Incorrectly classified Instance). Que suis-je suppos avoir comme rsultat pour dterminer quel serait le meilleur classifieur possible ?


Un classifieur construit un modle y=f(x) o f est une fonction calcule  l'aide d'une *base d'apprentissage* et qui associe  chaque individu x sa classe y. Evidemment, on ne peut pas valuer la prcision d'un tel modle  partir des exemples qui ont permis de l'apprendre parce qu'on peut trs bien se trouver en situation de *sur-apprentissage* : si f classe correctement tout les exemples de la base d'apprentissage mais va se tromper  chaque fois que tu lui prsentera un individu inconnu (c'est un cas extrme bien sr), alors c'est un trs mauvais classifieur. Il est dpourvu de la proprit de *gnralisation*. C'est pour cela, qu'on value les performances des classifieurs sur des *bases de test*. Si tu avais eu une grosse base de donnes, il aurait suffit de dcouper ta base en une base d'apprentissage (90% des individus) et une base de test (10% des individus restants) en conservant les proportions des classes dans chacune d'elle (*stratification*). Comme ta base est petite, on ne peut pas le faire car les rsultats ne seront pas statistiquement pertinents au sens de la loi des grands nombres. C'est pourquoi, on procde  un *rchantillonage* avec une *validation croise stratifie*. Les rsultats que l'on obtient sont moyenns. Par exemple, l'erreur de classification est en fait la moyenne des erreurs de classification de chaque test i.

Rsultats (par classe) 
TP rate : true positive rate (taux de vrais positifs)
FP rate : false positive rate (taux de faux ngatifs)
Precision/Recall/F-measure : prcision/rappel/f-mesure (voir ici)
ROC Area : Receiver Operating Characteristic Area (aire sous la courbe ROC : voir ici)

Commentaires : comme prvu, tes classifieurs sont quasiment tous parfaits pour la reconnaissance des nez sains, sont assez bons pour les soignables mais trs mauvais pour les non-soignables : 33% de bons classements pour les forts alatoires. Fais une copie de tous les non-soignables et recommence le processus pour voir.

Pour l'instant Weka te sort les rsultats finaux. Par exemple, pour les classifieurs baysiens, on calcule en fait p(c|x) la probabilit de la classe c sachant un individu x. On classe x en soignable si p(soignable|x) est plus grand que p(sain|x) et p(non-soignable|x). Le problme est que Weka ne te donne pas ces probas mais applique directement un vote majoritaire pour dterminer la classe. Il faudrait voir si tu peux obtenir plus de prcision sur les classifieurs, en particulier ces probas.

----------


## blackmisery

Bonsoir Aleph69,
je vais lire tous les autres tutoriaux que j'ai pu tlcharger aujourd'hui sur Weka. Il y en a forcment un qui explique plus en dtail le modle de fonctionnement de cet outil. 

Je ressaierai donc avec les donnes de bases, puis avec une copie des nez non soignables. 

Je ne sais pas si c'est de bonne augure ou non (de ne pas avoir un problme simple et de ne pas reconnatre les nez non soignables), mais je vais tcher d'avoir d'autres chantillons. Peut-tre aussi que ce sont mes variables qui ne sont pas assez reprsentatives et qu'il m'en faut de nouvelles...

Je termine tout a et je reviens vers toi.

Merci

----------


## blackmisery

Hello,

alors voil ce que j'ai fait : 

J'ai pris un seul algorithme, et j'ai essay toutes les options possibles et imaginables afin de voir si les probabilits dont tu m'as parles s'affichent ou non, pour plus de clart. 

Du coup, j'ai mis toutes les options de la validation croise sous Weka. J'ai aussi test cette mme validation croise avec deux autres outils connus (pas aussi sympathiques par contre par contre) : Tanagra et Orange (oh le beau nom).

J'ai post tous les rsultats ici : http://www.louizi.com/thesis/weka3.html
Je ne sais pas par contre si l'algorithme a le mme nom dans les 3 logiciels, mais bon, j'ai mis quelques schmas rcapitulatifs pour ceux qui voudraient tester ou s'y essayer.

PS : il s'agit toujours des donnes sans rajout d'une copie des nez non soignables.

J'ai aussi rajout une copie des donnes et effectu la validation croise avec plusieurs classifieurs : http://www.louizi.com/thesis/weka4.html


J'ai l'impression que les choses ne s'arrangent pas. Dois-je voir du ct de mon algorithme et essayer de trouver une solution afin de mettre plus en vidence les nez fracturs non soignables par rapport aux nez fracturs soignables? Je sche ici, ce n'est pas trs vident (pour l'instant) de faire la distinction.

En attente de vos retours !

----------


## Aleph69

Bonsoir,

je plaide coupable : j'ai crit n'importe quoi la dernire fois... on mettra a sur le compte de la fatigue! C'est tout  fait normal que tu ais une matrice de confusion avec 112 classements lorsque tu fais une validation croise parce que chaque individu n'est class qu'une seule fois. La base est dcoupe en k sous-bases et pour i allant de 1  k on prend la sous-base i pour les tests et les k-1 autres sous-bases pour l'apprentissage... soit exactement le contraire de ce que j'ai crit... encore dsol!

La copie a l'air de bien fonctionner avec les forts alatoires apparemment. Il faudrait que tu essayes l'algorithme adaboost sans faire de copie. Cet algorithme gnre plusieurs classifieurs et simule un processus plus fin que la copie pour spcialiser les classifieurs. Je pense qu'il doit tre dispo dans Weka.

Sinon, il y a deux autres approches. En fait, pour l'instant tu suis une stratgie "All against All" c'est--dire que tu essayes de discriminer toutes les classes en mme temps. Il existe deux autres stratgies : le One against All et le One Against One. La premire construit trois classifieurs (un par classe) en cherchant  discriminer une classe par rapport aux deux autres : au lieu de numroter les classes en 1, 2, 3, on numrote la classe cible en 1 et les deux autres en 0 et on fait a pour chaque classe. Ca conduit  la rsolution de problmes plus simples. A la fin, on classe les individus inconnus en procdant  un vote majoritaire sur les rponses donnes par les trois classifieurs. Le One Against One consiste  essayer de discriminer les couples de classes (1,2), (1,3) et (2,3) sans s'occuper des individus de la classe qui n'apparat pas. Normalement, en utilisant les SVM on devrait te proposer de choisir le type de stratgie.

En ce qui concerne l'obtention des probas, j'ai bien qu'il faille que tu t'abstiennes d'utiliser les interfaces graphiques : il va falloir mettre le nez dans le code de Weka ou d'un autre!  :;):

----------


## blackmisery

Bonsoir,
y a aucun souci pour moi, a m'a permis de faire connaissance avec deux nouveaux outils  ::): 

Donc voici l'AdaBoost sans copie : http://www.louizi.com/thesis/weka5.html A priori il me sort plus de donnes que les autres. J'ai tout mis (au cas o) et les rsultats de la validation croise sont tout en bas.

Si j'ai bien compris, je dois faire la validation croise avec les SVM en optant  chaque fois pour une stratgie? Ou je teste les deux stratgies directement, sans passer par la validation croise?

Enfin, pour les probabilits  afficher, je voulais  tout prix viter d'avoir  redvelopper encore  ::aie::  Je vais bidouiller un peu, et je te tiens au courant.


EDIT : J'ai (enfin) pu mettre en marche les SVM sous WEKA. C'est la bibliothque LIBSVM. Bref, j'ai chang les classes de mes donnes (sans copies) en 1 0 0, 0 1 0 et 0 0 1 pour obtenir (j'ai anticip ton retour sur ma question en haut) la validation croise pour les trois classifieurs, visible ici : 

http://www.louizi.com/thesis/wekasvm.html

Pour la stratgie One Against One, s'agit-il de mettre cette fois deux classes sur "cible" c'est  dire avoir 1 1 0, 1 0 1 et 0 1 1 ? J'y ai pens mais je me suis dit 1 1 0 n'est-ce pas la mme chose que 0 0 1? Ou bien est-ce la notion de "poids" que j'ai lue  plusieurs reprises que je dois appliquer ?

Tu excuseras mon manque de SVMisme  ::): 


EDIT 2 : J'ai post cette image http://www.louizi.com/thesis/svm.jpg, la mthode que j'utilise est le C-SVC, la One 
against One c'est One-Class SVM?

----------


## Aleph69

Bonsoir,

les rsultats d'adaboost ne sont pas terribles, je m'attendais  mieux... il ne reconnait pas les non soignables. Pour l'instant, le meilleur classifieur obtenu est celui calcul par les forts alatoires avec copie des non-soignables. 

Pour le SVM,  il faut prendre "multiclass SVM" ou "OAO SVM" (1vs1) ou "OAA SVM" (1vs all) et tu n'as pas besoin de changer les tiquettes, le logiciel doit le faire tout seul. Je n'utilise pas Weka donc je ne connais pas les noms exacts mais je serai surpris que ce ne soit pas propos, surtout dans la libsvm.

Pour les probas, il n'y a rien  dvelopper parce que c'est forcment dj fait : il faut juste ne plus passer par l'interface graphique et appeler directement les fonctions en java (de souvenir, il me semble que Weka est cod en java mais  vrifier).

Pour le multiclasse, tu peux jeter un oeil  la page de Libsvm :
http://www.csie.ntu.edu.tw/~cjlin/libsvm/
Il y a des publications  rcuprer et tu devrais trouver le nom des fonctions pour les SVMS multiclasses. Je suis certain qu'il y a une fonction SVM multiclasses qui retourne des probabilits.

----------


## blackmisery

Bonsoir,
Il faut souligner que Weka est trs trs pauvre en documentation. Et mme le petit forum qui lui est ddi ne contient qu'un nombre trs limit de questions / rponses.

Bref, j'ai pu trouver le 1-1; 1-All pour le SVM et j'ai par contre un doute sur le multi-classes : D'un ct j'ai trouv que ce n'tait pas possible de le faire automatiquement, et qu'il fallait faire des calculs derrire (euh quel genre?)  partir des combinaisons 2  2 (ce que j'ai mis  la fin dans la page des rsultats) et de l'autre j'ai trouv qu'il suffisait de mettre une fonction (MultiClass) pour obtenir directement le rsultat.

Dans le doute j'ai mis les deux (esprant trouver quelqu'un ayant plus de connaissance que moi sur Weka).

Tout est not ici : http://www.louizi.com/thesis/weka6.html

En attente de vos retours. Je vais voir du ct de Matlab si la toolbox SVM est plus abordable d'un point de vue documentation.

PS : Je pense que les forts alatoires restent tout de mme suprieurs  ce cher SVM

----------


## Aleph69

Bonsoir,




> Il faut souligner que Weka est trs trs pauvre en documentation


Il y a un manuel  cette adresse :
http://ovh.dl.sourceforge.net/projec...nual-3.6.0.pdf

En ce qui concerne les rsultats des SVMs ce n'est pas terrible mais a dpend de la manire dont Weka choisit les paramtres d'apprentissage. Normalement, il faut faire une slection de modle mais bon les forts alatoires donnent de bons rsultats.




> Je vais voir du ct de Matlab si la toolbox SVM est plus abordable d'un point de vue documentation.


Voici deux toolboxes dont l'une au moins fait du svm multiclasse :
http://cmp.felk.cvut.cz/cmp/software/stprtool/
http://prtools.org/

----------


## blackmisery

> Il y a un manuel  cette adresse :
> http://ovh.dl.sourceforge.net/projec...nual-3.6.0.pdf


Tu penses bien que je suis pass par tous les manuels, tous les tutoriaux... Je me suis mme constitu ma petite bibliothque Weka...

En attendant les tests sur Matlab, et en supposant que les forts alatoires donnent tout de mme les meilleurs rsultats (avec la copie), quelle sera la prochaine tape? Le training avec des chantillons de test pour voir si ce classifieur peut oui ou non dterminer avec une grande prcision l'tat d'un nez donn?

----------


## Aleph69

> quelle sera la prochaine tape? Le training avec des chantillons de test pour voir si ce classifieur peut oui ou non dterminer avec une grande prcision l'tat d'un nez donn?


La validation croise a dj rpondu  ta deuxime question.
La prochaine tape dpend de ce que tu souhaites faire. Tu peux essayer d'amliorer le modle, en inventer un autre qui est meilleur, chercher des variables sparant mieux les classes, changer de problme, ... l'ensemble de tes possibilits est indnombrable!

----------


## blackmisery

Ah c'est une bonne nouvelle alors!
Du coup je vais tester les SVM sous Matlab comme dernire tape, et je posterai les rsultats ici. Ensuite je vais m'amuser  revoir mes images, mon algorithme, les forts alatoires...

Je te remercie, encore, infiniment pour tout l'aide que tu m'as fournie. Et surtout pour m'avoir encourag  reprendre got  cette thse. ::ccool::

----------


## Aleph69

Je suis content d'avoir pu t'aider. Bon courage pour la suite!  ::ccool::

----------


## blackmisery

Pour tre sr que je ne me suis pas  ct de la plaque, et aprs avoir lu les diffrentes documentations sur SVM Multi-Classes (Matlab) : 

SVM est normalement destin aux problmes binaires et ne supporte pas par dfaut les multi-classes. Du coup, pour palier  ce problme, il a fallu ruser et utiliser soit la stratgie OAA ou bien OAO pour enfin combiner les rsultats statistiques obtenus et synthtiser le tout.

 Est-ce que ce que j'ai crit est correct ou bien je me trompe quelque part? Si c'est le cas c'est bon pour moi, Weka le fait et j'ai dj post les rsultats. Je n'ai plus qu' essayer de suite avec les copies des nez casss non soignables.

----------


## Aleph69

Bonsoir,

les SVMS comme la plupart des algorithmes de classement ont d'abord t dvelopps pour des problmes binaires. Ils admettent tous une extension naturelle aux problmes multiclasses qui correspond  la stratgie AAA (All against All). Le problme de cette extension est qu'elle complexifie normment la tche en essayant de discriminer toutes les classes en mme temps. C'est  ce moment l que des petits malins se sont dits "tiens, et si au lieu de rsoudre un gros problme avec plein de classes on essayait plutt de rsoudre pleins de problmes binaires" : c'est cette ide qui a conduit aux stratgies OAO et OAA.

OAA : stratgie la plus simple. Pour un problme  c classes, on construit c classifieurs binaires : pour i allant de 1  c, le classifieur i est construit en tiquetant la classe i  1 et toutes les autres  0. Pour prendre la dcision finale pour un individu, on applique un vote majoritaire (en gnral mais ce n'est pas la seule manire possible).

OAO : stratgie la plus complique. On construit un classifieur binaire par couple de classes et ensuite on fait une thorie probabiliste pour prendre en compte la dcision finale. Les sous-problmes de classement sont plus simples que dans OAO mais aussi plus nombreux.

----------


## blackmisery

Bonsoir,
pour clore le chapitre SVM, je poste ici les rsultats des Multiclass selon les deux stratgies (merci pour la bonne description au passage) : 

http://www.louizi.com/thesis/wekasvm2.html

PS : ce sont les rsultats avec les copies.

----------


## Aleph69

Bonjour,

ce n'est pas possible que les SVMs donnent d'aussi mauvaises performances pour les individus sains car on peut les discriminer avec toutes les autres classes  l'aide d'un hyperplan : l il y a forcment un problme (mauvais tiquetage, bogue dans Weka, ...)

----------


## blackmisery

Hello,

probablement un bug sous Weka. Du coup j'ai pris le SMO au lieu de LibSVM

http://www.louizi.com/thesis/weka7.html

l c'est plus SVM  ::):

----------


## pseudocode

> Bonjour,
> 
> ce n'est pas possible que les SVMs donnent d'aussi mauvaises performances pour les individus sains car on peut les discriminer avec toutes les autres classes  l'aide d'un hyperplan : l il y a forcment un problme (mauvais tiquetage, bogue dans Weka, ...)


Effectivement, ca parait suspect d'avoir un taux de 93% pour les random-forest et seulement 66% pour les SVM sur un problme  3 classes.  ::weird::

----------


## blackmisery

Je viens de dcouvrir que je me suis tromp sur les forts alatoires...  ::(:  en fait les rsultats correspondent  l'emploi d'un mta classifieur qui s'appelle Rotation Forest puis du classifieur Random Forest pour avoir les 93% VS 7%

Les Random Forest tous seuls obtiennent 88% VS 12%

Et ces fameux Rotation Forest (que je ne connais pas) obtiennent un score encore plus lev : 90% VS 10%

a compte d'utiliser un mta classifieur par dessus un classifieur? Auquel cas j'essaierai toutes les combinaisons  :8-):

----------


## pseudocode

> Je viens de dcouvrir que je me suis tromp sur les forts alatoires...  en fait les rsultats correspondent  l'emploi d'un mta classifieur qui s'appelle Rotation Forest puis du classifieur Random Forest pour avoir les 93% VS 7%
> 
> Les Random Forest tous seuls obtiennent 88% VS 12%


Ca fait tout de meme +10% par rapport au SVN. C'est curieux car les "forests" sont vraiment efficaces quand on a beaucoup de donnes de training. 

Mais bon, j'ai pris la conversation en route et je me rend compte que tu as deux classes trs voisines alors ca peut expliquer les perfs du SVN.




> Et ces fameux Rotation Forest (que je ne connais pas) obtiennent un score encore plus lev : 90% VS 10%
> 
> a compte d'utiliser un mta classifieur par dessus un classifieur? Auquel cas j'essaierai toutes les combinaisons


Heu, bah oui ca compte. Ca permet de quantifier la qualit d'un classifieur, et donc de temprer les rsultats du classifieur de base.

----------


## blackmisery

Bonsoir,

voici donc mes nomins aux meilleures combinaisons Mta Classifieur - Classifieur 

http://www.louizi.com/thesis/weka8.html

Je pense que le duo gagnant est sans aucun doute le Rotation Forest - Random Forest

En supposant que ce pourcentage de 93% n'est pas suffisant (pour moi c'est trs au del de mes esprances, reste  comparer avec les mdecins), en plus des autres possibilits d'amlioration voques par Aleph69, le mta classifieur est-il aussi concern ?

----------


## pseudocode

> En supposant que ce pourcentage de 93% n'est pas suffisant (pour moi c'est trs au del de mes esprances, reste  comparer avec les mdecins), en plus des autres possibilits d'amlioration voques par Aleph69, le mta classifieur est-il aussi concern ?


Le mta classifieur ne dpend que des mta-data choisies et de la performance du classifieur de base (et bien sur de l'algo du meta-classifieur  ::P: ).

A moins de partir sur la construction d'un algo rvolutionnaire de meta-classification ou d'identifier un nouveau set de mta-data, la meilleure mthode reste donc  amliorer la performance du classifieur de base : peut-tre en augmentant le nombre de donnes de training, ou en trouvant de nouveaux paramtres pour chaque individu.

----------


## physicist

Bonjour,

Je vois le file des changes et je trouves cela trs intressant. Je voulais apporter mon point  la discussion en proposant d'utiliser l'outil Partial Least Square (PLS) au lieu de Principal Composant Analysis (PCA).

Le PCA (ou ACP en franais) est un outil non-supervis mais qui ne considre pas les classes (nez cass, non cass). Par contre PLS, lui est un outil supervis (c'est  dire qu'il utilis une base de donne d'entrainement) mis qui lui tient compte des classes.

Le PLS surpasse le PCA mais demande une validation crois pour dterminer le nombre de dimension a conserver (par analogie le nombre de vecteurs propres avec PCA).

cf. IEEE Transaction on pattern analysis and machine intelligence vol.33 N0.6 June 2011, pp 1250-1265

----------

