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 :

Régression Linéaire C#


Sujet :

C#

  1. #1
    Membre confirmé Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut Régression Linéaire C#
    Bonjour à tous !

    Je souhaite réaliser une regression linéaire en C#. J'ai commencé par faire une petite recherche sur le forum et j'ai trouvé ça : http://www.developpez.net/forums/d10...neaire-csharp/

    Cependant, les coefficients que j'obtiens ne sont pas justes...

    Je pense que le souci vient du calcul de la Variance...

    Auriez vous une idée pour me dépanner (ou bien une dll/librairie que je puisse utiliser pour faire la régression)...?

    Merci !

    ps : j'ai essayé d'utiliser la dll de meta numerics, sans succès...

  2. #2
    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
    Voici ce que j'ai


    1 J'ai adapté un modèle original pour utiliser une Liste donnant des dates en X et des valeurs en Y


    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Drawing;
     
    namespace AdmStat
    {
      // http://biblioxtrn.uqar.qc.ca/stat/Fichesstat/multivariable/quanti/regression.htm
      // http://www.codeproject.com/KB/recipes/LinReg.aspx
     
      static class C_Regression
      {
        public static SizeF DoReg(List<C_DayVal> lDv)
        {
          if (lDv.Count < 2)
          {
            return new SizeF(0, 0);
          }
          double xAvg = 0;
          double yAvg = 0;
          DateTime BaseDate = lDv[0].Date.AddDays(-1);
          for (int i = 0; i < lDv.Count; i++)
          {
            C_DayVal DV = lDv[i];
            int x = (DV.Date - BaseDate).Days;
            xAvg += x;
            yAvg += DV.Val;
          }
     
          xAvg = xAvg / lDv.Count;
          yAvg = yAvg / lDv.Count;
     
          double v1 = 0;
          double v2 = 0;
     
          for (int i = 0; i < lDv.Count; i++)
          {
            C_DayVal DV = lDv[i];
            int x = (DV.Date - BaseDate).Days;
            v1 += (x - xAvg) * (DV.Val - yAvg);
            v2 += Math.Pow(x - xAvg, 2);
          }
     
          double a = v1 / v2;
          double b = yAvg - a * xAvg;
          return new SizeF((float)a, (float)b);
     
        }
     
        // *****************************************************************************************
     
        static void DoRegOrg(List<C_DayVal> lDv)
        {
     
     
          double[] values = { 4.8, 4.8, 4.5, 3.9, 4.4, 3.6, 3.6, 2.9, 3.5, 3.0, 2.5, 2.2, 2.6, 2.1, 2.2 };
     
          double xAvg = 0;
          double yAvg = 0;
     
          for (int x = 0; x < values.Length; x++)
          {
            xAvg += x;
            yAvg += values[x];
          }
     
          xAvg = xAvg / values.Length;
          yAvg = yAvg / values.Length;
     
          double v1 = 0;
          double v2 = 0;
     
          for (int x = 0; x < values.Length; x++)
          {
            v1 += (x - xAvg) * (values[x] - yAvg);
            v2 += Math.Pow(x - xAvg, 2);
          }
     
          double a = v1 / v2;
          double b = yAvg - a * xAvg;
     
          Console.WriteLine("y = ax + b");
          Console.WriteLine("a = {0}, the slope of the trend line.", Math.Round(a, 2));
          Console.WriteLine("b = {0}, the intercept of the trend line.", Math.Round(b, 2));
          Console.ReadLine();
        }
     
        // *****************************************************************************************
     
      }
     
    }

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. 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
  3. Tracé de courbe + Régression linéaire
    Par AC88mm dans le forum MATLAB
    Réponses: 4
    Dernier message: 02/05/2007, 14h27
  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