我需要高效地進行多元線性迴歸。我試圖使用Math.NET Numerics軟件包,但它看起來很慢 - 也許這是我編寫它的方式?對於這個例子,我只有簡單的(1 x值)迴歸。C#Math.NET Numerics中的LinearRegression代碼可以更快嗎?
我有這樣的片段:
public class barData
{
public double[] Xs;
public double Mid;
public double Value;
}
public List<barData> B;
var xdata = B.Select(x=>x.Xs[0]).ToArray();
var ydata = B.Select(x => x.Mid).ToArray();
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 b = p[0];
var a = p[1];
B[0].Value = (a * (B[0].Xs[0])) + b;
這運行約20倍比這個純C#慢:
double xAvg = 0;
double yAvg = 0;
int n = -1;
for (int x = Length - 1; x >= 0; x--)
{
n++;
xAvg += B[x].Xs[0];
yAvg += B[x].Mid;
}
xAvg = xAvg/B.Count;
yAvg = yAvg/B.Count;
double v1 = 0;
double v2 = 0;
n = -1;
for (int x = Length - 1; x >= 0; x--)
{
n++;
v1 += (B[x].Xs[0] - xAvg) * (B[x].Mid - yAvg);
v2 += (B[x].Xs[0] - xAvg) * (B[x].Xs[0] - xAvg);
}
double a = v1/v2;
double b = yAvg - a * xAvg;
B[0].Value = (a * B[Length - 1].Xs[0]) + b;
此外,如果Math.NET是問題,那麼如果有誰知道簡單的方法來改變我的多個X的純代碼我會感謝一些幫助
您是否確定要在任何調試器之外運行發佈版本? – 2013-05-11 09:25:17
什麼是慢鏡頭? 'var p = X.QR()。Solve(y)'? – 2013-05-11 11:11:09