0

質問への言及: math.net を使用した 多重回帰

@christoph-ruegg Fit.LinearMultiDim を使用して回帰を解決する例を教えてください。

var xdata = new DenseMatrix(
            new double[,]{{1, 36, 66, 45, 32},
                        {1, 37, 68, 12, 2},
                        {1, 47, 64, 78, 34},
                        {1, 32, 53, 56, 32},
                        {1, 1, 101, 24, 90}});

            var ydata = new double[] { 15, 20, 25, 55, 95 };

            var y = new DenseVector(ydata);

            var p = xdata.QR().Solve(y); // Fit ?

これを達成するためのより簡単な方法はありますか?

4

1 に答える 1

2

これが投稿されたサンプル コードとどのように関連しているかはわかりませんが、Fit.LinearMultiDim. (x=[x1,x2,..,xk], y)インライン ドキュメントによると、このルーチンは、同じ長さの 2 つの配列 (1 つは x 値の配列を含み、もう 1 つは y 値を含む) で編成された形式の多次元点のセットを最小二乗法で適合させ、線形結合に適合させます。任意の関数の。

屋外で N か所に行って高度を測定した結果、N (x,y,z) 個のタプルが得られたとします。ここで、単純なパラメトリック モデルによって景観を近似したいと考えています。目視検査により、近似できるプラトーが 2 つあることがtanhわかり、次の線形モデルを選択しました。

z -> p0 + p1*tanh(x) + p2*tanh(y) + p3*x + p4*x*y

...最適な p0-p4 を見つけたいところ。少なくとも線形パラメーターと同じ数のポイント (この例では 5) が必要ですが、理想的にはもっと多くのポイントが必要です。

(x,y) を (z) にマップするため、タプルを 2 つの配列に編成する必要があります。

double[][] xy = new[] { new[]{x1,y1}, new[]{x2,y2}, new[]{x3,y3}, ...  };
double[] z = new[] { z1, z2, z3, ... };

次にFit.LinearMultiDim、モデルで呼び出すことができます。これは、最適な 5 つのパラメーター p0-p4 を持つ配列を返します。

Fit.LinearMultiDim(xy, z,
   d => 1.0,              // p0*1.0
   d => Math.Tanh(d[0]),  // p1*tanh(x)
   d => Math.Tanh(d[1]),  // p2*tanh(y)
   d => d[0],             // p3*x
   d => d[0]*d[1]);       // p4*x*y
于 2014-03-26T23:13:14.070 に答える