|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 836 ![]() |
Une implémentation Java de l'algorithme Expectation-maximization (EM).
![]() exemple de convergence avec 3 distributions normales (voir post suivant) L'interface qui définit une loi de probabilité Code java :
Le code de l'algorithme EM Code java :
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
||||
|
20
|
|
|
#2 | ||||||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 836 ![]() |
Un exemple d'application avec des distributions normales (loi de probabilité gaussiennes).
![]() Définition d'une loi pour une distribution normale Code java :
Génération aléatoire de valeurs suivant 3 lois gaussiennes Code java :
Et enfin l'appel de l'algo EM: Code java :
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
||||||
|
10
|
|
|
#3 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 836 ![]() |
Citation:
L'algo EM ne sert pas à faire de l'ajustement de courbe (trouver les parametres d'une courbe en connaissant des "points de passages"). Pour cela, il faut plutot voir des algorithmes de http://en.wikipedia.org/wiki/Curve_fitting
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : mars 2010 Messages : 4 ![]() |
Merci pour cette précision sur la distribution des probabilités.
L'erreur dans le graphique doit donc provenir du fait que j'ai affiché les valeurs obtenues et non la probabilité d'obtenir une certain valeur. Cependant, cette méthode est celle que je dois utiliser pour traiter ma courbe : "To estimate the numbers and characterics of the echoes in the waveforms, Gaussians distribution functions are fitted to the siganl. The waveforms are modelled as a sum of Gaussian distributions." Extrait d'un article scientifique Donc si j'ai bien compris, votre programme permet : - de générer un certain nombre de points dont les valeurs sont aléatoires - de créer l'histogramme de fréquence de ces valeurs - d'appliquer à cet histogramme l'algo EM afin de lui faire correspondre des gaussiennes. Dans quelle partie de votre code, l'histogramme est-il créé ? Cela me permettrait de modifier mes données initiales afin de les normaliser pour avoir des valeurs entre 0 et 1 et de n'utiliser que la partie EM de votre programme. |
|
|
00
|
|
|
#5 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 836 ![]() |
Citation:
Il n'y a donc pas besoin de calculer l'histogramme dans le code. Et heureusement, car une variable gaussienne peut prendre une infinité de valeurs (entre -infini et + infini), ce qui obligerait à créer un histogramme de taille infinie ! J'ai dessiné l''histogramme ainsi que les gaussiennes uniquement pour "montrer" l'évolution de l'algorithme. Mais ce n'est pas ainsi que l'algo travaille. Il ne cherche pas à "ajuster" les gaussiennes sur l'histogramme.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : mars 2010 Messages : 4 ![]() |
Ok, l'histogramme n'est pas créé.
J'ai transformé des données de bases pour les faire correspondre à un ensemble de variable aléatoire (correspondant à votre x= randon(nbvaleurs) ). Le programme fonctionne apparemment correctement. Il me reste un seul problème : le nombre de gaussienne déterminé n'est pas celui que je souhaiterai. Le fichier en PJ illustre ce problème. L'histogramme pourrait être assimilé à la courbe originelle en jaune. Le nombre de pics à détecter est de 2 et le nombre de gaussienne ajustées doit donc aussi être de 2. En pratique seule une seule gaussienne est véritablement déterminée (les autres ont un poids trop faible). Savez-vous s'il est possible d'introduire un seuil dans l'algorithme EM afin de résoudre mon problème ? |
|
|
00
|
|
|
#7 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 836 ![]() |
Citation:
Si vous savez au départ le nombre de gaussienne (2), le plus simple est de faire une première analyse rapide de l'histogramme pour déterminer les 2 plus hauts sommets, et de centrer les gaussiennes sur ces 2 sommets.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : mars 2010 Messages : 4 ![]() |
j'avais déjà esasyé de centrer les gaussiennes sur les valeurs que je devais obtenir.
Mais cela ne change rien sur le fait qu'une seule gaussienne est calculée. |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : mars 2010 Messages : 4 ![]() |
Je pense que mes pics sont trop rapprochés pour pouvoir être détectés comme 2 maximums de gaussiennes différents.
Cela est-il possible ? J'ai essayé d'étaler mon histogramme sur un plus grand intervalle pour espacer les pics. Cela ne donne pas des résultats concluants. Y aurait-il un autre moyen de contourner ce problème ? |
|
|
00
|
|
|
#10 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 836 ![]() |
Heu... arrêter de prendre l'algo EM pour faire ce genre de chose. Mais je l'ai déjà dit je crois.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#11 |
|
Invité régulier
![]() peace tender Inscription : mai 2010 Messages : 6 ![]() |
Bonjour,
j'ai un question concernant le data d'entrée. Si le data est une image alors l'entrée est des samples des valeurs des niveaux de gris de l'image??? Merci beaucoup en avance |
|
|
00
|
|
|
#12 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 836 ![]() |
oui, tu peux utiliser les niveaux de gris des pixels d'une image comme entrée. L'algo EM te donnera la "meilleure" modélisation de l'histogramme
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#13 |
|
Invité régulier
![]() peace tender Inscription : mai 2010 Messages : 6 ![]() |
Est-que vous peuvez me donne un exemple de comment initialiser par des samples des niveaux de gris de l'image. Est-que je met tous les valeurs des niveaux de gris dans un vecteur et après faire un tirage de ce vecteur, ou je peut utiliser tous les valeurs? le taille de l'image est grand et si je veux met tous les valeurs ça va coût cher par rapport au temps de calcul! quest-que vous me consiel?
Est-que vous avez par chance un programme en language C qui fait la même comme le votre. Merci beaucoup en avance. |
|
|
00
|
|
|
#14 | ||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 836 ![]() |
Citation:
Il faut faire des tests, je ne peux pas répondre a cette question/ Citation:
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
||
|
00
|
|
|
#15 |
|
Invité régulier
![]() peace tender Inscription : mai 2010 Messages : 6 ![]() |
qu'est que votre programme prend comme entrée? est-qu'il prend la probabilité des lois comme entrée?
normalement l'alg EM estime le variance et le mean des distributions gaussiennes à partir des valeurs ou aussi il faut met les probabilités comme input? Merci |
|
|
00
|
|
|
#16 | |||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 836 ![]() |
Citation:
Code java :
En entrée : double[] x = liste de "valeurs" (réalisations d'une variable aléatoire) En entrée/sortie : Law[] laws = liste de "Loi de probabilité" (par exemple, 3 gaussiennes) --> en entrée, des valeurs de paramètres quelconques (= "initial guess"). --> en sortie, les valeurs de paramètres estimées par l'algo En sortie : double[] : liste des coefficients multiplicateurs de chaque loi
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|||
|
10
|
|
|
#17 |
|
Membre à l'essai
![]() Étudiant Inscription : novembre 2008 Messages : 87 ![]() |
salut tres belle contribution!
Malgres ca me dit rien, layout, l implementation et les explications sont super! ![]() ca sert a quoi cet algo? |
|
|
00
|
|
|
#18 | ||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 836 ![]() |
Citation:
Citation:
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
||
|
00
|
|
|
#19 |
|
Invité régulier
![]() peace tender Inscription : mai 2010 Messages : 6 ![]() |
Bonjour,
Je suis nouveau à java. j'ai compilé votre programme, mais je reçois cette erreur: class, interface, or enum expected dans 56 lignes. est-que vous pouvez m'aider ? je ne sais pas est-que ça veut dire cette erreur? Est-que je besoin de faire un fonction main ou votre programme est executable comme il est? Merci beacoup en avance |
|
|
00
|
|
|
#20 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 836 ![]() |
Citation:
Le code source complet de l'exemple est disponible dans cette archive. Il suffit de le compiler et d'executer la classe EM.Test
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com