Feedback

C# - Lineare Regression

Veröffentlicht von am 06.02.2013
(2 Bewertungen)
Funktion für die Lineare Regression...
GFU-Schulungen  [Anzeige]

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

C# Komplett

Sie kennen sich in objektorientierter Programmierung aus. Sie schreiben C++ oder Java? Und nun stehen Sie vor der Aufgabe, in C# Anwendungen zu erstellen. Das C# Komplett-Seminar verschafft Ihnen umfassende Programmierkenntnisse in dieser Sprache. Nach der Schulung entwickeln Sie selbständig Anwendungen mit C#. Sie kennen die Datentypen und Klassenbibliotheken der objektorientierten Programmiersprache C#. Der Komplettkurs setzt bei den Grundlagen von C# ein. Sie arbeiten mit Variablen und konvertieren Typen. Multithreading, Delegates, Generics sind nach dem Seminar für Sie kein Geheimnis mehr.

/// <summary>
        /// Lineare Regression</param>
        /// 
        /// </summary>
        /// <param name="x-Werte"></param>
        /// <param name="y-Werte"></param>
        /// <returns>m,n</returns>
        public static List<double> LineareRegression(List<double> xWerte, List<double> yWerte)
        {
           
            double xAvg = 0;

            double yAvg = 0;

            foreach (double _xWerte in xWerte)
            {
                 xAvg += _xWerte;
            }
            foreach (double _yWerte in yWerte)
            {
                yAvg += _yWerte;
            }

            xAvg = xAvg / xWerte.Count();

            yAvg = yAvg / yWerte.Count();

            double v1 = 0;

            double v2 = 0;

            for (int i = 0; i < xWerte.Count(); i++)
            {
                v1 += (xWerte[i] - xAvg) * (yWerte[i] - yAvg);
                v2 += Math.Pow(xWerte[i] - xAvg, 2);
            }

            //Formel y = m/x + n
            double m = v1 / v2;

            double n = yAvg - m * xAvg;

            List<double> mn = new List<double>();
            mn.Add(m);
            mn.Add(n);
            return mn;
        }
Abgelegt unter LineareRegression.

1 Kommentare zum Snippet

Koopakiller schrieb am 28.09.2014:
Wenn du schon alle Elemente der Liste druchläufst, könntest du auch ein IEnumerable<T> statt einer List<T> verwenden. Auch wäre es besser Point-Werte entgegen zu nehmen (selbst geschriebener Typ), so sind garantiert immer x und y vorhanden. (Momentan prüfst du nichtmal darauf.)

Beim durchlaufen der Elemente in der Liste könntest du deren Anzahl zählen um so den Aufruf von Count() zu vermeiden. (Die LINQ-Methode durchläuft nochmal alle Elemente, die Count-Eigenschaft der List<T> wäre am effektivsten).
Am besten wäre natürlich gleich die Average-Methode [1].

Als Rückgabewert solltest du keine List<T> verwenden, sondern lieber eine eigene Struktur oder out-Parameter.

[1]http://msdn.microsoft.com/de-de/library/system.linq.enumerable.average.aspx
 

Logge dich ein, um hier zu kommentieren!