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

如何构建所有数据点均在其下方且符合趋势的线性回归模型

解决方案

这个需求属于带硬约束的线性拟合,要求所有样本点满足 y ≤ ax + b,同时直线尽可能贴近数据上边缘、符合整体变化趋势,可通过以下三种成熟方案实现:

方法1:线性规划法(严格满足硬约束,优先推荐)

直接把拟合需求转化为线性规划问题求解:

  • 决策变量:线性方程的斜率a、截距b
  • 约束条件:对每一个样本点(x_i, y_i),强制满足 a*x_i + b ≥ y_i,保证没有点落在直线上方
  • 优化目标二选一:
    • 若要直线整体贴合上边缘趋势,最小化所有点到直线的垂直距离之和:min(sum(a*x_i + b - y_i))
    • 若要直线尽可能贴紧最高的几个边缘点,最小化所有点到直线的最大垂直距离:min(max(a*x_i + b - y_i))
      Python环境下可以直接用scipy.optimize.linprog或者pulp库实现,代码逻辑简单,计算速度快。

方法2:高分位回归法(实现简单,灵活度高)

如果可接受极少量点越界(可通过参数控制比例),直接使用τ≥0.99的分位回归即可:

  • 普通线性回归拟合的是条件均值,分位回归可以拟合任意条件分位点,τ=1的分位回归理论上和方法1的最小最大距离目标效果完全一致
  • 无需手动写约束,现有统计工具包都有成熟实现:Python可调用statsmodels.regression.quantreg,R可调用quantreg包
  • 如果需要完全没有点越界,只需要把拟合得到的直线截距向上微调,直到覆盖所有点即可,调整后斜率基本不变,不会破坏整体趋势

方法3:上凸包顶点拟合法

先提取所有样本点的上凸包顶点,仅对这部分顶点做普通线性回归:

  • 上凸包的顶点本身就是数据集的上边界点,天然没有其他点位于这些顶点的上方,避免了之前选最高n个点时的聚集性问题
  • 若拟合后仍有少量点越界,把截距向上调到刚好覆盖最高的越界点即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:09:05