Avatar billede koppelgaard Praktikant
06. august 2009 - 19:14 Der er 14 kommentarer og
1 løsning

C# linier regression

Hej Eksperter
Er der nogen der ved, hvordan man lave liniær regression i C#, dvs at finde hældning og skæring for bedste rette linie gennem en rækker punkter.

Centerspace tilbyder et klasse, som kan gøre det(tror jeg nok)men
man kan man ikke komme fra det uden at betale ?

http://www.centerspace.net/landing.php?id=lr&gclid=CKDUvqLDj5wCFQaF3god-kmqYg
Avatar billede Syska Mester
06. august 2009 - 19:48 #1
Det er vel bare ren matematik ...
Avatar billede koppelgaard Praktikant
06. august 2009 - 19:54 #2
Ja det har jeg overvejet.
Jeg kunne jo slå op i min matematikbog
men tænkte jeg kunne slippe lidt nemmere.

Michael
Avatar billede Syska Mester
06. august 2009 - 20:54 #3
ja okay ...

Det kan jeg godt følge dig i ... skulle bare lige være sikker på hvad du egentlig sprugte om da jeg kom i tvivl ...

Men det er så enten et .NET library eller den matematiske formel som vil virke i .NET ....

efter lidt tid på google ...
Måske ham gutten her har det med i hans Library.
http://community.opensourcedotnet.info/files/Default.aspx?Sort=PostDate

// ouT
Avatar billede koppelgaard Praktikant
06. august 2009 - 22:57 #4
Ja måske - ser på det :-)
Avatar billede koppelgaard Praktikant
06. august 2009 - 23:00 #5
Jeg giver 200 point, hvis du kan finde ud af om man kan og hvordan.....
Avatar billede Syska Mester
07. august 2009 - 00:47 #6
Det var ikke i hans Library så ?
Avatar billede arne_v Ekspert
07. august 2009 - 02:26 #7
Det er pærenemt !

Demo:

using System;
using System.Collections.Generic;

using MathNet.Numerics.LinearAlgebra;

namespace E
{
    public class Program
    {
        private static void Solve(double[] y, out double[] b, double[] x)
        {
            Vector one = Vector.Ones(x.Length);
            Vector x2 = Vector.Create(x);
            Matrix x3 = Matrix.CreateFromColumns(new List<Vector> { one, x2 });
            Vector y2 = Vector.Create(y);
            Matrix y3 = Matrix.CreateFromColumns(new List<Vector> { y2 });
            Matrix b3 = x3.Solve(y3);
            Vector b2 = b3.GetColumnVector(0);
            b = b2.CopyToArray();
        }
        private static readonly Random rng = new Random();
        private static double Eps(double spread)
        {
            return (rng.NextDouble() - 0.5) * spread;   
        }
        public static void Main(string[] args)
        {
            double[] x = { 1, 2, 3, 4, 5 };
            double[] y = new double[x.Length];
            double[] b;
            for(int i = 0; i < y.Length; i++)
            {
                y[i] = 0.456 + 0.123 * x[i] + Eps(0.05);
            }
            Solve(y, out b, x);
            Console.WriteLine("y = " + b[0] + " + " + b[1] + " * x");
            Console.ReadKey();
        }
    }
}
Avatar billede Syska Mester
07. august 2009 - 02:40 #8
Avatar billede arne_v Ekspert
07. august 2009 - 03:49 #9
Yes.

Der er en linear algrebra del i den.

Og dens Solve bruger ikke simpel b=inv(x'x)x'y men rigtig LU eller QR dekomponering.
Avatar billede koppelgaard Praktikant
07. august 2009 - 11:46 #10
Det lyder meget fint arne_V
Nu mangler jeg bare lige og hitte ud af, hvordan jeg ændre point til 200.
Avatar billede koppelgaard Praktikant
08. august 2009 - 10:31 #11
Er der nogen der vil have point.
Så må I sende svar:-)
Michael
Avatar billede arne_v Ekspert
08. august 2009 - 14:45 #12
svar
Avatar billede arne_v Ekspert
09. august 2009 - 01:28 #13
Skulle buzz ikke have haft point for at finde library'et ?
Avatar billede koppelgaard Praktikant
09. august 2009 - 11:39 #14
Ved I hvad, jeg er også lidt flov!!!
Selvfølgelig skulle buzz det!

Hvordan gør jeg nu, hvis buzz skal have point?
Jeg lovede jo 200 for en færdig løsning og du har da, Buzz gjordt en stor del af arbejdet!!!


Michael
Avatar billede arne_v Ekspert
09. august 2009 - 16:06 #15
Metoden i http://www.eksperten.dk/faq#faq-5-3 kan anvendes.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester