2014-03-26 594 views
0

Reffering的问题: Multiple Regression with math.net多元线性回归math.net 2.6 Fit.LinearMultiDim

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

有没有更简单的方法来实现这一点?

回答

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 
+0

好吧,我不明白为什么我们在写时Fit.Polynomial我们没有所有这些(d => *)的功能,但现在它是所有明确。 另一个问题是,如果Math.net提供了一个解决方案来拟合线性函数而不知道函数公式? –

+0

它不需要符号公式,但它需要它作为函数,因此它可以在样本点评估它以构建设计矩阵。除非您已经预先计算了设计矩阵。你绝对需要一个模型,因为回归就是寻找模型参数。除非你只是想要简单的“线性”模型(参见'Fit.MultiDim(x,y)'或者'MultipleRegression.NormalEquations(x,y,true)')或者根本不需要模型,而只需要某种形式的插值? –

+0

MathNet.Numerics中没有看到Fit.MultiDim(x,y)和MultipleRegression.NormalEquations(x,y,true)C#v2.6.1.30 我的另一个问题是,Fit.LinearMultiDim给出了相同的结果,无论Func参数的顺序。那么下面的魔法是什么:) –