寻找样本如何做加权线性回归

时间:2017-10-13 06:53:35

标签: c# linear-regression mathnet

我正在尝试使用MathNet来计算数据的加权线性回归。

文档为here

我正在尝试查找a x + b = y,使其最符合(x,y,w)列表,其中w是每个点的权重。

        var r = WeightedRegression.Weighted(
            weightedPoints.Select(p=>new Tuple<double[],double>(new [] { p.LogAvgAmount}, p.Frequency),
            weightedPoints.Select(p=>Convert.ToDouble(p.Weight)).ToArray(), false);

结果,在r我得到了一个点。我期待的是a和b的值。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

WeightedRegression.Weighted期望预测变量矩阵作为第一个参数,并且只传递LogAvgAmount。尝试在列表中添加1或使用WeightedRegression.Weighted

调用intercept: true
var x = weightedPoints.Select(p => new[] {p.LogAvgAmount}).ToArray();
var y = weightedPoints.Select(p => p.Frequency).ToArray();
var w = weightedPoints.Select(p => Convert.ToDouble(p.Weight)).ToArray();

// r1 == r2
var r1 = WeightedRegression.Weighted(weightedPoints.Select(p =>
    new[] {1, p.LogAvgAmount}).ToArray(), y, w);

var r2 = WeightedRegression.Weighted(x, y, w, intercept: true);

答案 1 :(得分:0)

使用Math.Net Numerics可能是一个好主意。

加权回归

有时可以通过抑制特定数据点来减少回归误差。我们可以通过将权重矩阵W引入正规方程XTy = XTXp来实现这一点。这样的权重矩阵通常是对角线的,对角线上的每个数据点都有单独的权重。

  

var p = WeightedRegression.Weighted(X,y,W);

如果我们能够将它们调整到感兴趣的点,例如,那么更好的回归变得有趣。抑制远处的所有数据点。不幸的是,这种模型参数取决于兴趣点t。

  

1://警告:初步api

     

2:var p = WeightedRegression.Local(X,y,t,radius,kernel);

您可以在以下位置找到更多信息: https://numerics.mathdotnet.com/regression.html