我使用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
数组,我想用它来进行多元回归。
答案 0 :(得分:1)
此Linear Regression With Math.NET Numerics中介绍的表单在技术上已经是一个多元线性回归。
假设您有数据点((uj,vj),yj)
而不是(xj,yj)
,则可以在构建X矩阵时相应地将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|
如果不清楚这在实际代码中是如何工作的,或者不是您正在寻找的内容,请发表评论。
答案 1 :(得分: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");
然后您可以更改多项式阶数(多项式函数的第三个参数)以获得更高的精度。