Regresji wielokrotnej w Math.Net wartości numerycznych

głosy
2

I uzyskuje się przy użyciu jednej regresji stosując metodę regresji math.net tak:

var xdata = new double[] { 10, 20, 30, 40, 50 };
var ydata = new double[] { 15, 20, 25, 55, 95 }; 

var X = DenseMatrix.CreateFromColumns(new[] { new DenseVector(xdata.Length, 1), new DenseVector(xdata) });
var y = new DenseVector(ydata);

var p = X.QR().Solve(y);
var a = p[0];
var b = p[1];

MessageBox.Show(a.ToString(), Test);
MessageBox.Show(b.ToString(), Test);

Pytanie brzmi: Co mogę zastosować wielokrotnej regresji z tej metody? Tak, mam również zdatatablicę i chcę to wykorzystać do regresji wielokrotnej.

Utwórz 07/01/2013 o 07:00
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
1

Ten kształt, który został wprowadzony w Regresja liniowa z Math.NET wartości numerycznych jest technicznie już wielokrotnej regresji liniowej.

Zakładając, że punkty danych, ((uj,vj),yj)a nie (xj,yj)można odwzorować xna krotki u,vodpowiednio przy budowie macierzy X. Więc komórka X[i,j]będzie wtedy zamiast fi(xj)być oceniane jako fi(uj,vj).

Na przykład, dla regresji liniowej do linii przestrzennego danej przez y=a+b*u+c*v, by skończyć z:

  • p1 = a, f1 : u,v -> 1
  • p2 = b, f2 : u,v -> u
  • p3 = c, f3 : u,v -> v

Stąd system całości:

|y1|   |1  u1  v1|   |a|
|y2| = |1  u2  v2| * |b|
|..|   |.. ..  ..|   |c|
|yM|   |1  uM  vM|

Proszę zostawić komentarz, jeśli nie jest jasne, jak to będzie działać w rzeczywistym kodzie, czy też nie, co szukasz.

Odpowiedział 08/01/2013 o 15:29
źródło użytkownik

głosy
1

@ Christoph-Ruegg Dziękuję za post na regresji liniowej, który pomógł mi zacząć z Math.NET.
@ team16sah @ g-pickardou Jeśli masz dostęp do biblioteki Math.NET, proponuję użyć Fit.Polynomial () metody. Znalazłem go bardziej niezawodny i elastyczny niż tylko za pomocą regresji liniowej.
W twoim przypadku powyżej, kod będzie wyglądać następująco:

        var xdata = new double[] { 10, 20, 30, 40, 50 };
        var ydata = new double[] { 15, 20, 25, 55, 95 };

        double[] p = Fit.Polynomial(xdata, ydata, 1);
        var a = p[0];
        var b = p[1];

        MessageBox.Show(a.ToString(), "Test");
        MessageBox.Show(b.ToString(), "Test");

Następnie można zmienić kolejność wielomianu (trzeci parametr funkcji Wielomian), aby uzyskać większą precyzję.

Odpowiedział 26/12/2013 o 03:54
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more