2

我使用这样的 math.net 回归方法实现了简单的单回归:

var xdata = new double[] { 10, 20, 30, 40, 50 };
var ydata = new double[] { 15, 20, 25, 55, 95 }; 

var X = DenseMatrix.CreateFromColumns(new[] { new DenseVector(xdata.Length, 1), new DenseVector(xdata) });
var y = new DenseVector(ydata);

var p = X.QR().Solve(y);
var a = p[0];
var b = p[1];

MessageBox.Show(a.ToString(), "Test");
MessageBox.Show(b.ToString(), "Test");

问题是:我可以用这种方法应用多重回归?所以,我也有zdata数组,我想用它来进行多元回归。

4

2 回答 2

1

@christoph-ruegg 感谢您关于线性回归的帖子,它帮助我开始使用 Math.NET。
@team16sah @g-pickardou 如果您可以访问 Math.NET 库,我建议您使用Fit.Polynomial()方法。我发现它比仅使用线性回归更可靠和灵活。
在上述情况下,代码如下所示:

        var xdata = new double[] { 10, 20, 30, 40, 50 };
        var ydata = new double[] { 15, 20, 25, 55, 95 };

        double[] p = Fit.Polynomial(xdata, ydata, 1);
        var a = p[0];
        var b = p[1];

        MessageBox.Show(a.ToString(), "Test");
        MessageBox.Show(b.ToString(), "Test");

然后您可以更改多项式阶数(多项式函数的第三个参数)以获得更高的精度。

于 2013-12-26T05:54:44.590 回答
1

正如在使用 Math.NET Numerics 进行线性回归中介绍的那样,这种形式在技术上已经是多元线性回归。

假设您有数据点((uj,vj),yj)而不是,您可以在构建 X 矩阵时相应(xj,yj)地映射x到元组。u,v因此,单元格X[i,j]将不会fi(xj)被评估为fi(uj,vj)

例如,对于由 给出的空间线的线性回归y=a+b*u+c*v,您最终会得到:

  • p1 = a,f1 : u,v -> 1
  • p2 = b,f2 : u,v -> u
  • p3 = c,f3 : u,v -> v

因此完整的系统:

|y1|   |1  u1  v1|   |a|
|y2| = |1  u2  v2| * |b|
|..|   |.. ..  ..|   |c|
|yM|   |1  uM  vM|

如果不清楚这将如何在实际代码中工作,或者不是您要查找的内容,请发表评论。

于 2013-01-08T17:29:08.747 回答