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),组织在两个长度相同的数组中(一个包含 x 值数组,一个包含 y 值),线性组合任意函数。

假设我们到户外去了 N 个地方并测量了海拔高度,得到了 N (x,y,z) 个元组。现在我们想通过一个简单的参数模型来近似景观。通过目视检查,我们发现有两个可以近似的平台,tanh我们选择以下线性模型:

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

...我们想在哪里找到最合适的 p0-p4。我们至少需要与线性参数一样多的点(本例中为 5 个),但理想情况下要多得多。

由于我们将 (x,y) 映射到 (z),我们需要将元组组织在两个数组中:

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 回答