You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Math.NET的多元回归计算指定百分位数的预测值?

多元回归中计算指定百分位数的预测值

要在现有多元回归逻辑基础上得到指定百分位数的预测值,核心思路是通过残差的百分位数调整回归的均值预测值,具体步骤和修改后的代码如下:

关键逻辑说明

  1. 计算回归拟合残差:先对训练数据集的每个样本用回归模型计算预测值,再用实际y值减去预测值得到残差——残差反映了模型预测与实际值的偏差分布。
  2. 统计残差的百分位数:用Math.NET的Percentile.Quantile方法计算残差的25%、75%分位数,这些分位数代表偏差分布的对应位置。
  3. 生成百分位预测值:对新输入计算回归的均值预测值后,加上对应残差的百分位数,即可得到该百分位对应的预测结果。

修改后的完整代码

using MathNet.Numerics;
using MathNet.Numerics.Statistics;
using System.Collections.Generic;
using System.Linq;

namespace Project
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // 训练数据集
            var xPoints = new List<List<double>>
            {
                new List<double> {2000, 100},
                new List<double> {2002, 60},
                new List<double> {2004, 50},
                new List<double> {2006, 30},
            };
            var yPoints = new List<double> { 50, 60, 70, 80 };

            // 执行多元线性回归
            var xArray = xPoints.Select(item => item.ToArray()).ToArray();
            var multiFit = Fit.MultiDim(xArray, yPoints.ToArray(), intercept: true);

            // -------------------------- 新增逻辑:计算残差与百分位数 --------------------------
            // 计算每个训练样本的预测y值
            var predictedYList = xArray.Select(x => multiFit[0] + x[0] * multiFit[1] + x[1] * multiFit[2]).ToList();
            // 计算残差(实际值 - 预测值)
            var residuals = yPoints.Zip(predictedYList, (actual, predicted) => actual - predicted).ToArray();
            // 计算残差的25%和75%百分位数
            var residual25Percentile = Percentile.Quantile(residuals, 0.25);
            var residual75Percentile = Percentile.Quantile(residuals, 0.75);

            // -------------------------- 计算新输入的百分位预测值 --------------------------
            var inputDimension1 = 2003;
            var inputDimension2 = 55;
            // 基础均值预测值
            var meanPredictedY = multiFit[0] + inputDimension1 * multiFit[1] + inputDimension2 * multiFit[2];
            // 25%分位数对应的预测值
            var predictedY25 = meanPredictedY + residual25Percentile;
            // 75%分位数对应的预测值
            var predictedY75 = meanPredictedY + residual75Percentile;
        }
    }
}

补充说明

  • 这里采用非参数方法,直接基于训练数据的残差分布计算百分位,无需假设残差服从特定分布(比如正态分布),适合小样本场景。
  • 若数据集较大,也可假设残差服从正态分布,通过残差标准差结合正态分布分位数(如25%对应-0.674σ、75%对应0.674σ)调整预测值,但非参数方法更直观且无需额外假设。

内容的提问来源于stack exchange,提问作者Marin Petkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 23:43:22