Bonjour,
Je ne trouve pas la méthode de calcul des moindres carrés sur une matrice.
Quelqu'un pourrait -il me donner un exemple de résolution sur une matrice ?
(2 1)
(5 2)
(7 3)
(8 3)
par exemple ?
Merci d'avance
Bonjour,
à ma connaissance la méthode des moindres carrés sert à déterminer l'ajustement entre un modèle théorique et des résultats empiriques.
Je ne comprend donc pas le sens de ta question.
enfait c'est, si je comprends mieux, le systeme d'équation :
A(2 1)(5 2)(7 3)
B(8 3)
AX=B
on devrait pouvoir faire un truc de moindres carrés
Bonjour
qu'entends-tu par "calcul des moindres carrés sur une matrice" ? tu cherches à en faire quoi, de cette matrice ?
post croisés
si A a trois lignes et 2 colonnes, tu peux la multiplier par une X qui aurait 2 lignes et n colonnes, et le résultat aura 3 lignes et n colonnes : en aucun cas ce ne sera B ...
oui, ouais .. je sais pas du tout, je comprends absolument pas enfait. Avec un systeme qui n'a pas de solution unique on peut trouver les moindres carrés dit mon cours, c'est tout
Ah !
c'est quand on a un système rectangulaire AX=B, avec plus d'équations que d'inconnues : on cherche alors un vecteur X tel que la différence R = B-AX ait une norme euclidienne minimale (norme euclidienne = racine carrée de la somme des carrés des coordonnées dans la base canonique, d'où le nom de "moindres carrés")
on montre que c'est obtenu si X vérifie
, elle, est carrée.
hum, d'accord, je pense qu'il est trop tard pour en faire un algo et tout en C pour 12h .. mais merci quand même
Bonjour Lafol,
La méthode des moindres carrés a été mise au point (inventée) par Gauss.
Léon1789 a indiqué un lien sur le document qui décrit tout ça.
A mon avis, le nom "moindre carrés" viendrait plutôt de ce que lorsqu'on a des mesures en surnombre la valeur la plus probable est obtenue lorsque la somme des carrés des écarts à la valeur cherchée est minimale.
Dans la pratique, on a une fonction de plusieurs variables, cette somme de carrés est minimale lorsque sa dérivée s'annule. Pour réaliser le calcul, on écrit que les dérivées partielles s'annulent et on obtient ainsi un système linéaire de N équations à N inconnues.
Je suppose que c'est cela dont parlait le cours de Mathildou.
Par ailleurs, à ma connaissance, il n'y a pas de bibliothèque en C qui résolve cela. Puisqu'il 2 étapes distinctes
1- le calcul de la fonction Somme et l'établissement des équations résultant des dérivées partielles, ça c'est des maths
2- la résolution du système linéaire. Cette seconde étape pourrait exister, mais je suis sûr que ce n'est pas le cas.
Cette méthode est naturellement très utilisée. Une application simple et très connue est la régression linéaire.
un algo qui calcule transposée d'une matrice fois cette matrice, tu ne me feras pas croire que ça n'existe pas
idem pour un algo de résolution de système linéaire à matrice symétrique ....au pire il y a la méthode de Gauss....
et pour les moindres carrés en général, passer par des dérivées partielles est peu habile, ça prouve un point singulier, pas un minimum. le th des projections en dimension N où N est le nombre de données est bien plus rapide et efficace ....
Bonjour,
@Dlzlogic
Il n'a jamais été question de dérivation ici (dans le cas de l'exo). On a juste un système "impossible" à résoudre car n'appartient pas à , c'est-à-dire l'espace généré en envoyant tous les vecteurs de l'espace de départ (ou plus simplement les vecteurs de base de l'espace de départ car l'application est linéaire). Ce qu'on cherche c'est le vecteur appartenant à qui soit le plus proche de et par "le plus proche", on entendra celui tel que ||Ax-b||^2 soit le plus petit possible (qui minimise le carré de la norme, en l'occurrence la norme associée au produit scalaire usuel).
En réalité il s'agit juste de la projection orthogonale du vecteur sur et on peut prouver que est bien le bon candidat si et seulement si comme le disait lafol (que je salue). Et on peut également prouver qu'il existe toujours une solution à ce système.
Je n'ai jamais codé en C mais je le ferais en deux étapes :
D'abord calculer et et par la suite résoudre ce système via une méthode traditionnelle (méthode de Gauss par exemple).
Si j'ai fait une étourderie quelque part merci de le signaler !
Bonne journée
@ Lafol,
Je n'ai jamais dit qu'il n'existait pas de module qui calcule des transposées et des produite de matrice en C, j'en ai même dans ma machine, pour faire des tests, mais c'est moi qui les ai écrits. Naturellement, d'autres développeurs ont certainement écrits aussi leurs modules, mais je répète, à ma connaissance il n'existe pas de bibliothèque officiellement disponible qui traite cela.
Concernant le calcul des moindres carrés, comment penses-tu qu'on calcule une régression linéaire ?
@ Ban,
Je répète ce qu'a dit Mathildou,
"Avec un systeme qui n'a pas de solution unique on peut trouver les moindres carrés dit mon cours, c'est tout"
J'ai répondu strictement à sa question.
déjà exposé ici Cercle des moindres carrés sans excel pour un cercle aux moindres carrés, ça s'adapte à n'importe quel modèle linéaire....
Bonjour,
@ Lafol,
Manifestement un développeur s'est amusé à faire des fonctions dans ce domaine. Je vais regarder.
Mais si j'avais publié la mienne, c'est pas pour ça qu'on pourrait dire qu'il existe une librairie qui fait cela.
C'est tout de même un peu dommage que ce ne soit pas du tout documenté. Par ailleurs, à première vue, ça ne me semble pas avoir été écrit par un professionnel.
Un prototype comme celui-là :
int sl_decomp_cholesky(double a[NMAX][NMAX],double r[NMAX][NMAX],int n)
est assez douteux.
Eu, Merci pour vos réponses mais je n'ai pas fait cette question du coup mais je souhaite quand même savoir ce que c'est !
Mais sur un exemple concret ça donne quoi ? Par exemple, Si jai:
I: 1 2 3 4 5
Xi: -2 0 3 4 5
Yi: 0 2 4 4 3
Ils demandent la droite des moindre carrés
Et aussi les résidus..
Ben oui mais je sais pas, peut être qu'après je comprendrai avec une matrice, ça revient au même non
Dans la même matière on apprend sur les matrices et dans des annales des examens précédents ya ça :/
et donc on sait que le résidu ||B-AX|| sera minimum lorsque X sera solution de : ça te donne un système de deux équations à deux inconnues a et b ....
Bonjour,
C'est un calcul qu'il faut avoir fait au moins une fois.
Là, je vais vous détailler la méthode habituellement utilisée.
L'équation d'une droite s'écrit Y = AX + B
La méthode des moindres carrés consiste à dire que la valeur la plus probable pour les paramètres A et B est celle qui minimise la somme S=Somme((yi-Axi-B)²)
1- on développe la somme
2- on écrit que la dérivée de S par rapport à A est nulle, et la même chose pour B
3- on obtient ainsi deux équation linéaires avec pour inconnues A et B, qu'il suffit de résoudre.
Je vous laisse le faire.
Il faut bien sûr observer que on minimise le carré des différences des y (les résidus) et non pas le carré des distances de points (X;Y) à la droite.
"méthode" qui donne un point singulier de la fonction S(a,b) sans jamais prouver que ça donne bien un minimum et pas un maximum ou un point selle ..
Autant apprendre par cœur que et que b se détermine en disant que la droite de régression passe par le barycentre du nuage de points, ça gagne bien des calculs inutiles par rapport à ce sdérivées partielles
le système ne dit d'ailleurs pas autre chose ... on peut le voir comme moyen mnémotechnique pour à la fois la formule donnant a et le calcul des covariances et variances ...
Bonjour Lafol,
Mais je ne dis pas le contraire.
Je ne pense pas que la droite cherchée passe par le barycentre du nuage de points.
Par contre, je ne sais pas ce que signifie ton système, et naturellement, encore moins comment le résoudre.
Là, je veux bien que tu m'expliques.
tu ne le penses peut-être pas mais pourtant c'est un résultat élémentaire qu'on apprend dans toutes les bonnes écoles ! la droite de régression passe par le point moyen !
sinon calculer qui est une matrice deux lignes deux colonnes, je ne vais pas te faire l'injure de te l'expliquer .... pareil pour résoudre un système à deux équations et deux inconnues
Tu sais, pour moi, l'étude des matrices remonte à une cinquantaine d'années et je n'ai jamais eu l'occasion d'utiliser les matrices.
Un système de N équations à N inconnues, je sais faire.
alors la transposée, ce n'est pas compliqué : on prend la même matrice, sauf que les anciennes lignes deviennent les nouvelles colonnes et les anciennes colonnes deviennent les nouvelles lignes
ainsi dans l'exemple proposé par Mathildou,
pour les multiplier, j'avais fait un petit dessin qui vaut mieux qu'un long discours ici : calculs matriciels
on obtient pour :
ici,
ainsi
il suffit de résoudre le système pour obtenir les coeffs a et b de la droite de régression
la deuxième équation, divisée par le nombre de points, dit exactement que la droite de régression passe par le point moyen, et elle dit exactement la même chose que , si mes souvenirs sont bons.
Dizlogic
OK,
Oui, j'ai tout suivi, mais je n'ai rien compris.
Donc en résumé :
tAA11 = Somme(xi²)
tAA12 = Somme(xi)
tAA21 = Somme(xi)
tAA22 = N
tAB1 = Somme(xiyi)
tAB2 = Somme(yi)
C'est effectivement ce à quoi j'arrive, en sachant ce que je fais et pourquoi.
Si N est grand, par exemple 250, la transposée, c'est pas un problème, par contre les produits, ça peut être difficile.
Là tu m'as montré pour un système simple. Qu'en serait-il pour un calcul de ce type avec 12 paramètres à calculer ? Comment un calculateur moyen et même franchement pas doué comme moi, pourrait-il établir ces 2 matrices A, B, C, ...L ?.
Pour mémoire, j'ai codé la résolution d'un système en partant du calcul matriciel. Naturellement je me suis aidé de documentation. J'ai fait la comparaison en temps d'exécution avec mon outil basé sur le pivot de Gauss. En temps de calcul, y'a pas photo, la méthode que j'utilise est plus rapide.
Concernant le fait qu'une droite calculée par cette méthode passe par le centre de gravité, c'est vrai, mais comme j'ai découvert le terme "régression linéaire" une bonne dizaine d'années après la fin de mes études, on n'a pas pu me l'enseigner, et si ça avait présenté un intérêt quelconque je m'en serais souvenu. En effet, cette méthode est linéaire souvent après un changement de variable, c'est la raison pour laquelle j'évite de dire "linéaire" puisque ce n'est qu'un cas particulier.
@ Léon,
Legendre explique très bien cela.
http://bibnum.education.fr/mathematiques/algebre/legendre-et-la-methode-des-moindres-carres
Dizlogic, as-tu compris le cadre probabiliste dans lequel se place le document que tu cites ?
Est-ce que cela à un lien avec le cadre de la discussion ici ? ... non.
Encore une fois, essaies de comprendre les hypothèses avant d'avancer les conclusions.
le terme "linéaire" ne fait pas référence à une droite, mais à un modèle où on fait des combinaisons lionéaires de fonctions données !
chercher a, b, c, d pour que y = a sin x + b cos x + c exp x + d ln x passe au mieux dans un nuage de points, ça rentre dans ce cadre
et programmer la méthode de Gauss, tu m'étonnes que ça pédale : c'est une des plus lentes.
maintenant programmer des méthodes de résolutions de systèmes linéaires, faut aimer perdre son temps : il y a tout ce qu'il faut dans les bibliothèques Fortran, et tout ce qu'il faut pour intégrer des routines fortran dans des langages évolués.
avec 12 paramètres à calculer, ça fera un système de 12 équations à 12 inconnues à résoudre, tout simplement, ça ne changera rien sur le principe.
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :