/ / Viacnásobná regresia v Math.Net Numerics - c #, lineárna regresia, mathdotnet

Viacnásobná regresia v Math.Net Numerics - c #, lineárna regresia, mathdotnet

Dosiahla som jednoduchú regresiu s použitím math.net regresnej metódy, ako je táto:

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");

Otázka: Čo môžem použiť túto regresiu pomocou tejto metódy? Takže aj ja zdata pole a chcem ho použiť pre viacnásobnú regresiu.

odpovede:

1 pre odpoveď č. 1

Tento formulár, ako bol zavedený v Lineárna regresia s numerickými matematikami, je technicky už viacnásobná lineárna regresia.

Za predpokladu, že máte dátové body ((uj,vj),yj) namiesto (xj,yj), môžete mapovať x do novej oblasti u,v pri vytváraní matice X. Takže bunka X[i,j] by namiesto toho fi(xj) hodnotiť ako fi(uj,vj).

Napríklad pre lineárnu regresiu na priestorovú čiaru danú y=a+b*u+c*v, skončíte s:

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

Preto celý systém:

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

Ponechajte komentár, ak nie je jasné, ako by to fungovalo v skutočnom kóde, alebo nie to, čo hľadáte.


1 pre odpoveď č. 2

@ christoph-ruegg Ďakujem vám za príspevok o lineárnej regresii, ktorý mi pomohol začať s Math.NET.
@ team16sah @ g-pickardou Ak máte prístup k knižnici Math.NET, odporúčam vám použiť Fit.Polynomial () metóda. Zistil som, že je spoľahlivejšia a flexibilnejšia ako len pri použití lineárnej regresie.
Vo vašom prípade, kód by vyzeral takto:

        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");

Potom môžete zmeniť poradie polynomiálov (tretí parameter funkcie Polynomial), aby ste získali väčšiu presnosť.