【问题标题】:Looking for a sample how to do weighted linear regression寻找样本如何进行加权线性回归
【发布时间】:2017-10-13 06:53:34
【问题描述】:

我正在尝试使用 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 的值。

我做错了什么?

【问题讨论】:

    标签: c# linear-regression mathnet-numerics


    【解决方案1】:

    WeightedRegression.Weighted 需要一个预测矩阵作为第一个参数,并且只有 LogAvgAmount 被传递。尝试将1 添加到列表中或使用intercept: true 调用WeightedRegression.Weighted

    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);
    

    【讨论】:

      【解决方案2】:

      使用 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

      【讨论】:

        猜你喜欢
        • 2016-05-16
        • 2020-05-05
        • 1970-01-01
        • 1970-01-01
        • 2018-07-31
        • 2018-03-14
        • 2020-07-07
        • 1970-01-01
        • 2020-06-11
        相关资源
        最近更新 更多