具有Fit.LinearMultiDim的多元线性回归math.net 2.6

时间:2014-03-26 21:25:34

标签: c# linear-regression mathdotnet

回答这个问题: Multiple Regression with math.net

@克里斯托弗-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 ?

有没有更简单的方法来实现这个目标?

1 个答案:

答案 0 :(得分: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