【问题标题】:Multiple Linear Regression math.net 2.6 with Fit.LinearMultiDim多元线性回归 math.net 2.6 与 Fit.LinearMultiDim
【发布时间】:2014-03-26 21:25:34
【问题描述】:

关于问题: Multiple Regression with 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 ?

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

【问题讨论】:

    标签: c# linear-regression math.net mathnet-numerics


    【解决方案1】:

    我不确定这与发布的示例代码有何关系,但我当然可以使用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
    

    【讨论】:

    • 好吧,我不明白为什么我们必须在 Fit.Polynomial 中编写所有这些 (d => *) 函数,但现在一切都清楚了。另一个问题是,Math.net 是否在不知道函数公式的情况下给出了拟合线性函数的解决方案??
    • 它不需要符号公式,但它需要它作为函数,以便它可以在样本点处对其进行评估以建立设计矩阵。除非您已经预先计算了设计矩阵。你绝对需要一个模型,因为回归就是寻找模型参数。除非您只想要简单的“线性”模型(参见Fit.MultiDim(x,y),或带有截距的MultipleRegression.NormalEquations(x,y,true))或者根本不需要模型而是某种形式的插值?
    • 我在 MathNet.Numerics C# v2.6.1.30 中看不到 Fit.MultiDim(x,y) 和 MultipleRegression.NormalEquations(x,y,true) 我的另一个问题是 Fit.LinearMultiDim无论 Func 参数的顺序如何,都会给出相同的结果。那么下面的魔法是什么:)
    猜你喜欢
    • 2010-11-23
    • 2013-07-17
    • 2014-05-20
    • 1970-01-01
    • 2016-10-15
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多