bonjour
je voudrai normalisé plusieurs valeurs de différents paramètres et je ne sais pas comment faire
merci d'avance
bonjour
je voudrai normalisé plusieurs valeurs de différents paramètres et je ne sais pas comment faire
merci d'avance
Bonjour,
Peux tu nous donner un exemple de ce paramètre à normaliser?
en règle général on fait comme ceci pour normalisé
Code : Sélectionner tout - Visualiser dans une fenêtre à part normalised_data = (data - min(data)) / ( max(data) - min(data) );
Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!
Merci Gooby
Je viens de trouver cette fonction à l'instant même
je t'éxplique; j'ai 4 paramétres homogneité, energie, contraste et corrélation lleur valeur sont comme suit:
homogeneité= 0.0345
Correlation= 0.1349
energie= 8.3423E-6
contraste= 21966
Les paramétres se répétent pour les 14 images que j'ai.
on remarque que ya une grande différence entre energie et contraste, aprés je voudrai faire une distance euclidienne entre les paramétres de cette image avec les paramétres d'une autre le probléme c'est que la valeur qui influencera sur les résultats sera le contraste c'est pour cela que je cherche a normaliser.
j'ai un peu modifier ma procédure
j'ai mis toutes ces valeurs dans une matrice
donc ma matrice= (14 x 4) car j'ai 14 images et 4 paramètres, comment je dois normaliser, j'ai vu sur le help de matlab des normalisation en ligne et en colonne
mes paramétres sont éxprimés en colonne dois je faire une normalisation en colonne ?
encherchant j'ai aussi trouver ce code:
et un autre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Asum = sum(A); % sum the columns Anorm = A./Asum(ones(size(A, 1), 1), :); % normalise the columns
je précise que mon but est de rendre toute les valeurs à la même échelle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 % Calcul des écarts-type ET = std(X(:,:)) ; % Calcul des moyennes suivant chaque caractère M = mean(X(:,:)); % Application de la fornmule ci-dessus: for i = 1 : 34 for j = 1 : 6 N(i,j) = (X(i,j) - M(j)) / ET(j); end end
ma question est la suivante bien que les 2 codes me donnent des matrices normalisées qui sont différnentes, mais je sais pas sur quoi je devrai me basé pour prendre l'un ou l'autre, merci de m'aider.
Oui il faut bien que tu fasses une normalisation par colonne.
Explication: Pour normalisée une colonne il faut que tu soustrais à chacune des valeurs de la colonne, la valeur minimale de la colonne.
Donc si A est une colonne cela nous donne:
Puis diviser chacune des valeurs de cette nouvelle colonne B par la valeur maximale de B soit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part B=A-min(A);
Ce qui nous donne pour ta matrice X de taille [14,4]
Code : Sélectionner tout - Visualiser dans une fenêtre à part A_normalised = B/max(B);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for i = 1:4 % On va effectuer ceci pour chaque colonne X_temp(:,i) = X(:,i)-min(X(:,i)); X_normalised(:,i) = X_temp(:,i)/max(X_temp(:,i)); end
Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!
est ce que cette technique me permettera d'avoir toutes les valeurs à la même echelle de grandeur?
le x_temp calcul quoi?
car j'ai testé le code ça me donne que des valeurs 0 et 1 ou bien des 0 et 2
Reprenons depuis le début.
Que signifie normaliser? Cela signifie transformer toutes les valeurs d'un vecteur (ou d'une matrice) afin qu'elles soient comprises dans un intervalle défini. Le plus souvent, quand on normalise, sans définir explicitement cet intervalle, cela veut dire transformer toutes les valeurs de notre matrice afin qu'elles soient contenu dans l'intervalle [0,1]. Bien entendu, la valeur minimale de notre matrice sera ainsi fixé à 0 tandis que la valeur maximale sera fixée à 1.
Comment fait-on cela?
Prenons un exemple:
Voici la matrice (qui est ici une unique colonne) à normaliser:
La première étape pour normaliser est de fixer la plus petite valeur de notre matrice à 0. Pour ce faire, nous allons soustraire cette plus petite valeur à elle-même; ce qui dans notre cas nous donne -2 - (-2) = 0Or, pour garder une cohérence sur notre matrice, toute opération effectuer sur une valeur doit être exécuter sur l'ensemble:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 A = 7 4 3 -2
On obtient alors un nouveau vecteur A_temp (que j'ai appelé X_temp dans mes précédents posts) que voici:
A_temp = A-min(A)
Ce qui donne:
Voilà, on a fixé notre valeur la plus basse de notre matrice tout en conservant sa cohérence. Maintenant il s'agit de transformer la plus haute valeur de cette matrice en 1 afin que la normalisation soit complète. Pour se faire, on va diviser la plus grande valeur de notre matrice par elle même; ce qui dans notre cas nous donne 9/9 = 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 A_temp = A - (-2) A_temp = 9 6 5 0
Appliquons encore une fois cette opération à l'ensemble du vecteur pour conserver notre cohérence:
A_normalized = A_temp/max(A)
Ce qui donne
Voilà, nous avons obtenu notre vecteur normalisé entre 0 et 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 A_normalized = A_temp / 9 A_normalized = 1.0000 0.6667 0.5556 0
Si après cette explication tu continues à avoirje vais avoir besoin de ton code pour pouvoir t'aider.Envoyé par eviasra
Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!
Merci Gooby
mais ça ne marche toujours pas pour ma matrice ça me met 0 pour toutes la colonne qui a les valeurs les plus faible elles étaient à 10e-6
voici ma matrice en piece jointe.
et voila j'ai fais ce que vous m'avez dis
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 A=load('c:\Matlab\matrice.txt') A_temp(:,i) = A(:,i)-min(A(:,i)); A_normalised(:,i) = A_temp(:,i)/max(A_temp(:,i));
Chez moi cela marche très bien:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 for i = 1:4 A_temp(:,i) = A(:,i)-min(A(:,i)); A_normalised(:,i) = A_temp(:,i)/max(A_temp(:,i)); end A_normalised = 0.238963795746688 0.828571428571429 0.873567812416733 0.185175079581628 0.515979401706042 0.671428571428571 1.000000000000000 0.639533121115659 0 0.571428571428572 0.964961364241940 1.000000000000000 1.000000000000000 0.221428571428571 0.324540367705835 0.379111717447324 0.955973112150635 0 0 0.521903895710171 0.497307284091356 0.328571428571429 0.312816413535838 0.435804153403062 0.469358072251268 0.600000000000000 0.624433786304290 0.147354858268910 0.387515232517001 0.850000000000000 0.776179056754596 0.188828255267546 0.266205432603483 0.792857142857143 0.860111910471623 0.267955131120206 0.622626675576870 0.414285714285714 0.548494537703171 0.183325754130665 0.302016588702386 0.907142857142857 0.754596322941647 0.214324693042292 0.450607335193993 0.614285714285714 0.667998934185985 0.148036986509019 0.292739494476984 1.000000000000000 0.911270983213429 0 0.422697433075200 0.685714285714286 0.712363442579270 0.161285432772472
Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!
c'est bon j'ai trouvé
ça marche super bien
merci
Bonjour Gooby
je reviens vers toi pour une petite question
aprés traitements j'ai cette matrice
je voudrai supprimer les 0 aprés la virgule pour les 2 premieres colonnes et je bloque la dessus
Pour pouvoir enlever les zéros après la virgule je ne connais personnellement que deux méthodes. Il faut soit transformer tes nombres en chaîne de caractères, soit utilisés sprintf de cette manière:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 >> pi ans = 3.1416 >> sprintf('%.2f',pi) ans = 3.14
Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!
c'est pas vraiment ce que je cherché mais j'ai tésté sur mes matrice, et c'est pas indispensable d'enlever les 0 aprés la virgule.
Je te remercie beaucoup
Par contre pour la normalisation aprés avoir normaliser ma matrice , si j'ai une entrée avec des valeurs non normalisées et que je veux la comparer aux valeurs normalisées de ma matrice est ce que cela est possible?
Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!
afin d'injecter ma matrice dans un notre logiciel je pensé qu'il fallé enlever les 0 aprés la virgule, hors le problème n'avait rien à avoir avec ça.Je n'ai pas compris.
sauf que ce n'est pas une matrice que j'ai c'est un vecteur de 1x4 chaque valeur corresponds a une colonne de ma matrice qui est de taille 14 x 4Oui, il suffit de normaliser tes valeurs de la nouvelle matrice à comparer.
mon vecteur= [2.2648e+04 0.027 0.1248 9.5287e-06]
Dans ce cas, il faut quand même que tu les normalises mais avec les données de ta première matrice que tu as normalisée; c'est à dire que tu dois utilisée le même max et min que tu as utilisé pour normalisée la première. C'est en quelque sorte comme si tu incluais ton nouveau point dans ton ancienne matrice non normalisée, et qu'ensuite seulement tu normalisais l'ensemble. Est-ce que j'ai été clair? c'est peut être un peu confus ce que je raconte là
Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!
oui je t'ai bien compris, donc les valeurs normalisées de mon ancienne matrice ne vont pas changées?
parcontre si la valeur de mon nouveau vecteur est max ou min donc c'est pas logique de garder les anciennes valeures nan?
Supposons que tu aies un vecteur de base comme ceci : A= [0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10]Le minimum de A est de 0 et son maximum de 10.
Quand tu auras normalisé, c'est très simple, tu auras donc A_norm = [0; 0.1; 0.2; 0.3; 0.4; 0.5; 0.6; 0.7; 0.8; 0.9; 1];jusque là tout va bien.
Maintenant supposons que tu aies une nouvelle valeur égale à 7.5.
Si tu l'inclus dans ton tableau de départ et que tu normalises elle sera égale à 0.75.
Pour l'instant pas de problème.
Maintenant si tu inclus une nouvelle valeur = 17 il faudra refaire ta table de normalisation initiale. cette valeur = 17 correspondra nécessairement à la valeur 1 de ta nouvelle matrice normalisée, mais en effet cela va écraser toutes les autres valeur de cette façon:
En effet, c'est assez génant, puisque tes valeurs de ta matrice de base ont changé... mais tu n'as pas le choix. Si tu veux comparer une valeur avec ta matrice de base normalisé, il faut que cette valeur soit comprise entre le minimum et le maximum de ta matrice initiale A.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 A=cat(1,A,valeur); %valeur = 17 new_A_norm = (A-min(A))/max(A) new_A_norm = 0 0.0588 0.1176 0.1765 0.2353 0.2941 0.3529 0.4118 0.4706 0.5294 0.5882 1.0000
Et si maintenant tu inclus encore une nouvelle valeur? et bien c'est le même principe, il faut l'inclure à la matrice initiale A ainsi que la valeur précédente qui a modifié ta matrice normalisé (ici 17) puis normalisé de nouveau.
Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!
Merci j'ai trés bien compris
norlamelent les valeurs que j'ai ne sont pas min max
maintenant je passe à la pratique comme j'ai 4 valeurs car 4 colonnes différentes ça ne va pas étre évident
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager