回答这个问题: 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 ?
有没有更简单的方法来实现这个目标?
答案 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