Regression linéaire bizare (matlab)

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
jijiz
Messages: 4
Enregistré le: 18 Mar 2008, 10:45

Regression linéaire bizare (matlab)

par jijiz » 18 Mar 2008, 10:53

Bonjour,

J'éssaye d'appliquer une regression linéaire sur deux nuages de points (ne pas tenir compte des deux trois points bleus qui traitent en dehors du nuage)

Je trouve que regression linéaire sur cette image ne passe pas vraiment pas le "milieu" du nuages de points,
Image

et sur cette image, la droite ne passe pas du tout par les points. Pourriez-vous m'éclairer?

Image
Voici le code :

Code: Tout sélectionner
plot(d(1,:), d(2,:), 'd');
% Regression lineaire d'ordre 2 : f(x) = m*x*x +o .x + n
p = polyfit(d(:,1), d(:,2), 1);
c = [];
c(1,:) = d(1,:);
c(2,:) = (p(2) + d(1,:) * p(1));
plot(d(1,:), d(2,:), 'd', c(1,:), c(2,:));
%title('Donnees et regressions lineaires');
legend('donnees', 'ordre 0', 'ordre 1');


Vous en pensez quoi?



anima
Membre Transcendant
Messages: 3762
Enregistré le: 15 Sep 2006, 12:00

par anima » 18 Mar 2008, 12:14

Pas mal; perso, je parierai surtout sur le type d'algo utilisé par matlab. Cette erreur est typique d'un groupage par pairs; sais-tu quel algo matlab utilise? (pairs, LSF, autre...)

JJa
Membre Relatif
Messages: 254
Enregistré le: 06 Mar 2008, 16:52

par JJa » 18 Mar 2008, 12:23

Bonjour,

il convient de rappeler que la méthode des moindres carrés repose sur le calcul du (ou des) zéro(s) des dérivées partielles de la somme des écarts quadratiques relativement aux paramètres à optimiser (paramètres définissant la droite de régression).
Le fait d'annuler les dérivées partielles n'implique pas que l'on obtiendra le minimum de l'écart quadratique moyen : on trouvera un ou des extrémums. Donc ce peut être aussi bien un maximum qu'un minimum.
Au vu de la figure, il semble très probable que le logiciel de calcul utilisé a trouvé un maximum au lieu d'un minimum : la droite tracée est très probablement la droite pour laquelle la somme des écarts quadratiques est maximum.
Pour en dire plus, il faudrait connaître le détail du code de la procédure utilisée par le logiciel et étudier comment est gérée la discrimination entre les racines correspondant soit à un maximum, soit à un minimun (ce qui est "transparent" pour l'utilisateur, mais essentiel pour la fiabilité du logiciel).

JJa
Membre Relatif
Messages: 254
Enregistré le: 06 Mar 2008, 16:52

par JJa » 18 Mar 2008, 12:37

Je voudrais ajouter que les logiciels de régression sont souvent de "grosses machines compliquées" parce qu'on veut qu'elles aient une large polyvalence d'utilisation (applicabilité à des fonctions aussi bien linéaires que non linéaires par exemple et beaucoup d'autres options).
On en arrive ainsi à ce que l'adage "qui peut le plus peut le moins" n'est pas toujours vérifié : un logiciel capable de traiter certains cas très difficiles pourra éventuellement se trouver mis en défaut sur un cas ultra-simple qu'une méthode beaucoup plus rustique traiterait correctement.
Le cas de la regression linéaire par la méthode des moindres carrés est le plus simple qui soit. Si j'avais un conseil a donner, ce serait (au lieu de faire appel à un logiciel "généraliste") d'utiliser purement et simplement les formules bien connues qui donnent les paramètres de la droite de régression et il ne devrait pas y avoir de difficulté.

jijiz
Messages: 4
Enregistré le: 18 Mar 2008, 10:45

par jijiz » 18 Mar 2008, 13:51

JJa a écrit:Je voudrais ajouter que les logiciels de régression sont souvent de "grosses machines compliquées" parce qu'on veut qu'elles aient une large polyvalence d'utilisation (applicabilité à des fonctions aussi bien linéaires que non linéaires par exemple et beaucoup d'autres options).
On en arrive ainsi à ce que l'adage "qui peut le plus peut le moins" n'est pas toujours vérifié : un logiciel capable de traiter certains cas très difficiles pourra éventuellement se trouver mis en défaut sur un cas ultra-simple qu'une méthode beaucoup plus rustique traiterait correctement.
Le cas de la regression linéaire par la méthode des moindres carrés est le plus simple qui soit. Si j'avais un conseil a donner, ce serait (au lieu de faire appel à un logiciel "généraliste") d'utiliser purement et simplement les formules bien connues qui donnent les paramètres de la droite de régression et il ne devrait pas y avoir de difficulté.

Bonjour,

Merci pour ces réponses bien détaillées (même si je n'ai pas tout saisi...)
Je vais de toute manière être obligé de l'implémenter en C(++), et donc de developper l'algo.

jijiz
Messages: 4
Enregistré le: 18 Mar 2008, 10:45

par jijiz » 18 Mar 2008, 15:10

Avec cette implémentation ca marche nikel :

Code: Tout sélectionner
                % Moindres carrees sur le nuage de points d
                % Donnees originales
                H=ones(size(d,2),2);   % n lignes 2colonnes
                H(:,1)=d(2,:)';      %1ère colonne c'est le vecteur x ( ' = transposition)
                y = d(1,:);
                %vecteur Y
                Y=y';
                teta=inv(H'*H)*H'*Y;    %algorithme
                a=teta(1,1);
                b=teta(2,1);
                ym= a*d(2,:) + b;
                str=sprintf('régression linéaire ');
                %plot(d(1,:),ym,'d',d(1,:),d(2,:));
                plot(d(2,:), d(1,:), 'd', d(2,:), ym);
                xlabel('valeurs de x');
                ylabel('valeurs de y');
                posX1=10;
                posX2=50;
                text(d(2,posX1),y(posX1),'mesures');
                text(d(2,posX2),ym(posX2),'modèle');
                grid;


Je souhaite sortir un coefficient indiquant l'écart entre la courbe et le nuage de points (calcul de la dispersion). Pourriez vous me donner une piste pour faire ma recherche google (ou le code ^^)?

Merci


C'est ça :
??????????????????????
Si l'on appelle ;)i l'écart vertical entre la droite et le point (xi;), yi;))
;)i= yi -a*xi -B???????????????

jijiz
Messages: 4
Enregistré le: 18 Mar 2008, 10:45

par jijiz » 18 Mar 2008, 16:54

c'est bon ca marche.. Merci

Code: Tout sélectionner
         % Moindres carrees sur le nuage de points d
                % Donnees originales
                H=ones(size(d,2),2);   % n lignes 2colonnes
                H(:,1)=d(2,:)';      %1ère colonne c'est le vecteur x ( ' = transposition)
                y = d(1,:);
                %vecteur Y
                Y=y';
                teta=inv(H'*H)*H'*Y;    %algorithme
                a=teta(1,1);
                b=teta(2,1);
                ym= a*d(2,:) + b;
                str=sprintf('régression linéaire ');
                %subplot(1,2,1);
                figure();
                plot(d(2,:), d(1,:), 'd', d(2,:), ym);
                xlabel('valeurs de x');
                ylabel('valeurs de y');
                posX1=10;
                posX2=50;
                text(d(2,posX1),y(posX1),'mesures');
                text(d(2,posX2),ym(posX2),'modèle');
                grid;

ghozlanib
Messages: 5
Enregistré le: 04 Juin 2013, 02:08

par ghozlanib » 04 Juin 2013, 02:14

Bonjour
J’ai un petit souci qui je pense à plus sa place dans le forum mathématiques qu’informatique.
J’essaye actuellement de réaliser une régression non linéaire multiple. on doit établir une relation de la forme: Y=C*X1^a1*X2^a2*X3^a3*X4^a4
on applique la fonction log pour linéariser la relation précédente. Selon l'auteur d'un article que j'utilise pour valider mes résultats
il a introduit un variable intermédiaire X=X1^b1*X2^b2*X3^b3*X4^b4 et je ne vois pas comment il a déterminé b1, b2 , b3 et b4 et puis il a
présenté Y en fonction de X (Y=f(X)) et le problème se ramène à une simple régression. il a établit que Y=C*X^m et donc on faisont le produit il a déterminé a1,a2, a3 et a4.
Ma question est donc : comment et avec quel moyen je peux adopter cette démarche? (avec l'Excel n'abouti à rien)
En espérant que mon sujet passionne
Merci à tous

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 28 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite