最小二乘回归Math.Net

时间:2014-09-02 13:41:46

标签: c# linear-regression

我正在寻找有关如何使用Math.Net的一些信息。我没有看到任何关于如何使用36个独立变量和1个因变量创建矩阵的文档。如果这是一个普通矩阵,我会假设

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

我想创建的矩阵是:

var xdata = new double[,] { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 
        { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, 
        { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 
        { 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, 
        { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, 
        { 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };

        var ydata = new double[] { 5, 4, 7, 6, 6, 7 };
        Vector<double> p = MathNet.Numerics.LinearRegression.MultipleRegression.NormalEquations(xdata, ydata);

0,1表示36个独立变量,yData表示因变量。它是否正确?我无法让它正确运行。

该行:

  

Vector p = MathNet.Numerics.LinearRegression.MultipleRegression.NormalEquations(xdata,ydata);

不喜欢我添加的数据。

好的,我已经做了一些环顾四周,发现了这个:

double[] p = MultipleRegression.QR(
        new[] { new[] { 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, new[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 }, new[] { 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 } },
        new[] { 6.0, 7.0, 5.0 },
        intercept: true);

这会运行但它的回报让我困惑:-16.4999999999999 1.95 我希望看到常数,效果,系数,标准误差,标准。容差,tp值,系数

但我需要的是Constant和Coefficient。 我现在看到Double返回了37个变量,常量和36个元素很棒!但问题是,如果我手动运行它们,它们与我得到的变量不匹配。我想我需要知道如何找到回归的系数,并确保我使用线性最小二乘回归,文档不清楚。

我也试过这个:

 var xdata = new double[] { 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
 var ydata = new double[] { 5.0 };
 double[] p = SimpleRegression.Fit(xdata, ydata);

如果没有运气,它将无法正常运行,它似乎想拥有更多的ydata。

0 个答案:

没有答案