IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Calcul de régression linéaire en C#


Sujet :

C#

  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Calcul de régression linéaire en C#
    Bonjour

    Je cherche une source CSharp permetant de faire le calcul de régression linéaire d'un ensemple de points (le but et de recuperer a et b pour evaluer la tendance d'évolution dans le temps de mesures quotidiennes)

    J'avoue que mes notions de statistique et l'application des formules se sont un peu estompées et qu'a priori j'ai un peu peur d'y plonger tout seul

    Donc je cherche un petit bout de code ou une recette pratique qui m'aideront plus que des formules abstraites et indigeste ou qu'une librairie hermétique !

    Une idée ?
    Un conseil ?

    Merci de votre aide

    N.B. Du code dans un autre language est aussi bon, j'aurais plus facile a traduire qu'une formule abstraite

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    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
    22
    23
    24
    25
    26
    void Main()
    {
    	var points = new List<Point>()
    						{
    							new Point{X=1,Y=8},
    							new Point{X=3,Y=1},
    							new Point{X=2,Y=4}
    						};
     
    	var a = points.Variance(p=>p.X,p=>p.Y)/points.Variance(p=>p.X,p=>p.X);
    	var b = points.Average(p=>p.Y)-a*points.Average(p=>p.X);
    }
     
    public static class Extension
    {
    	public static double Variance<T>(this IEnumerable<T> list, Func<T,double> selectA, Func<T,double> selectB)
    	{
    		return list.Average(p=>selectA(p)*selectB(p))-(list.Average(p=>selectA(p))*list.Average(p=>selectB(p)));
    	}
    }
     
    public struct Point
    {
    	public double X {get;set;}
    	public double Y {get;set;}
    }
    Vérifié sur Excel


  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci PitMaverick78

    Je teste
    J'ai déja renommé Point en PointD pour lever l'ambiguité sur Point
    J'ai juste un peu de mal a capter dans ton exemple comment la liste points peut recevoir la methode Variance

    Et le compilateur a du mal aussi

    'System.Collections.Generic.List<AdmStat.Common.C_Regression.PointD>' does not contain a definition for 'Variance' and no extension method 'Variance' accepting a first argument of type 'System.Collections.Generic.List<AdmStat.Common.C_Regression.PointD>' could be found (are you missing a using directive or an assembly reference?)

  4. #4
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut PitMaverick78

    Ce ne serais pas plutot ceci ?

    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
    22
    23
        static public void Mainu()
        {
          var points = new List<PointD>()
          {
            new PointD{X=1,Y=8},
            new PointD{X=3,Y=1},
            new PointD{X=2,Y=4}
          };
     
          var a = Variance(points, p => p.X, p => p.Y) / Variance(points, p => p.X, p => p.X);
          var b = points.Average(p => p.Y) - a * points.Average(p => p.X);
        }
     
        public static double Variance<T>(this IEnumerable<T> list, Func<T, double> selectA, Func<T, double> selectB)
        {
          return list.Average(p => selectA(p) * selectB(p)) - (list.Average(p => selectA(p)) * list.Average(p => selectB(p)));
        }
     
        public struct PointD
        {
          public double X { get; set; }
          public double Y { get; set; }
        }

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Oui alors enfait Variance est une methode d'extension qui doit être mise dans une classe statique en effet. J'ai un peu résumé le code.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Régression linéaire, loi F, t, normale et Khi-2
    Par philben dans le forum Contribuez
    Réponses: 3
    Dernier message: 20/08/2020, 14h22
  2. calcul de pente de régression linéaire
    Par I.Z.M.M dans le forum SSAS
    Réponses: 0
    Dernier message: 23/03/2010, 13h23
  3. Module qui permet de faire des régression linéaire ?
    Par Anti-T dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 04/09/2009, 13h28
  4. Réponses: 2
    Dernier message: 22/12/2006, 20h24
  5. [NaN] Calcul d'une régression linéaire
    Par GLDavid dans le forum Langage
    Réponses: 1
    Dernier message: 24/10/2006, 12h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo