2

次のような math.net 回帰メソッドを使用して、単純な単一回帰を達成しました。

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

質問: この方法で重回帰を適用できるものは何ですか? そのため、配列もあり、zdataこれを重回帰に使用したいと考えています。

4

2 に答える 2

1

@christoph-ruegg 線形回帰に関する投稿をありがとうございます。Math.NET を使い始めるのに役立ちました。
@team16sah @g-pickardou Math.NET ライブラリにアクセスできる場合は、Fit.Polynomial()メソッドを使用することをお勧めします。線形回帰を使用するよりも信頼性と柔軟性が高いことがわかりました。
上記の場合、コードは次のようになります。

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

次に、多項式の次数 (Polynomial 関数の 3 番目のパラメーター) を変更して、精度を高めることができます。

于 2013-12-26T05:54:44.590 に答える
1

この形式は、Math.NET Numericsを使用した線形回帰で導入されたように、技術的には既に多重線形回帰です。

((uj,vj),yj)の代わりにデータ ポイントがあると仮定すると、X マトリックスを作成するときに、それに応じてタプルに(xj,yj)マップできます。そのため、セルは代わりにとして評価されます。xu,vX[i,j]fi(xj)fi(uj,vj)

たとえば、 によって与えられる空間線への線形回帰の場合、次のようにy=a+b*u+c*vなります。

  • p1 = af1 : u,v -> 1
  • p2 = bf2 : u,v -> u
  • p3 = cf3 : u,v -> v

したがって、完全なシステム:

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

これが実際のコードでどのように機能するか不明な場合、または探しているものではない場合は、コメントを残してください。

于 2013-01-08T17:29:08.747 に答える