【问题标题】:Weighted multidim fit using Math.net numerics使用 Math.net 数值的加权多维度拟合
【发布时间】:2017-04-27 08:13:36
【问题描述】:

我正在使用 Fit.LinearMultiDim 方法将 4 参数函数拟合到多维数据集(2-dim)。更具体:我适合这个功能

(x1,x2) => p1 + p2*x1 + p3*x1*x1 + p4*x2

FitParameters = Fit.LinearMultiDim(xy, z,
    d => 1.0,         // p0*1.0
    d => d[0],        // p1*x1
    d => d[0] * d[0], // p2*x1^2
    d => d[1]);       // p3*x2

现在我有一个问题,我也想为 xy 数据点使用权重。我知道我可以使用Fit.MultiDimWeighted,但在这种情况下,我只有一个线性平面,无法实现用于参数 2 的平方依赖。

你知道如何将两者结合起来吗?

感谢您的帮助。

【问题讨论】:

    标签: math.net


    【解决方案1】:

    在查看了 Math.Net 代码后,我找到了一种将多重维度拟合与加权数据点结合在一起的解决方案。希望这对遇到同样问题的人有所帮助。

    在我运行的源代码中:

    FitParametersModel1 = MyFitFunctionModel1(xy, z, w,
        d => 1.0,           // p0*1.0
        d => d[0],          // p1*x1
        d => d[0] * d[0],   // p2*x1^2
        d => d[1]);         // p3*x2
    

    而函数MyFitFunctionModel1 看起来像这样:

    public double[] MyFitFunctionModel1(double[][] x, double[] y, double[] w, params Func<double[], double>[] functions)
    {
        var design = MathNet.Numerics.LinearAlgebra.Matrix<double>.Build.Dense(x.Length, functions.Length, (i, j) => functions[j](x[i]));
        return MathNet.Numerics.LinearRegression.WeightedRegression.Weighted(design, MathNet.Numerics.LinearAlgebra.Vector<double>.Build.Dense(y), MathNet.Numerics.LinearAlgebra.Matrix<double>.Build.Diagonal(w)).ToArray();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多