本题需要在不断新增样本的过程中,实时回答当前所有样本拟合出的最小二乘直线在某个 x0 处的预测值。
对于当前样本集合 (xi,yi),一元线性回归模型为:
y=a∗x+b你在同城物流平台负责“运费估计引擎”的开发与维护。平台已经积累了大量历史订单,每条订单记录两个核心数值:运输距离 x(单位:km)和成交运费 y(单位:元)。系统使用一元线性回归模型 y=a∗x+b 来快速估算新订单的运费。
由于市场行情会不断变化,历史订单也会持续新增。你需要实现一个在线学习模块:每当有新的订单样本加入,或收到一次预测查询,都要基于当前已有的全部样本实时维护模型并给出结果。
在一次查询发生时,设当前样本集合为 (xi,yi),共 n 条。回归参数 a 和 b 需要使平方误差和
i∑(yi−(a∗xi+b))2达到最小。查询给定坐标 x0 时,输出的预测值就是该最优直线在 x0 处的取值。
为了便于在线计算,维护以下四个统计量:
当最优解唯一时,直接使用最小二乘公式:
a=n∗Sxx−(Sx)2n∗Sxy−Sx∗Sy b=nSy−a∗Sx此时查询 x0 的预测值为:
y^=a∗x0+b特殊情况处理如下:
约束条件:
第一行包含一个整数 Q,表示操作总数。
接下来 Q 行,每行描述一个操作,格式为以下两种之一:
ADD x y:新增一条历史样本,其中 x 是运输距离,y 是成交运费。QUERY x0:基于当前所有样本进行查询,x0 是需要预测的距离。对于每个 QUERY 操作,输出一行预测值。结果必须保留固定 6 位小数。
输入
5
ADD 4 8
ADD 4 12
ADD 4 10
QUERY 4
QUERY -3
输出
10.000000
10.000000
说明
三个样本 (4,8)、(4,12)、(4,10) 的 x 都等于 4,因此所有样本的 x 相同,最小二乘最优解不唯一。
这种情形下采用常数模型:令 a=0,b 取所有 y 的平均值。这里 b=38+12+10=10。
因此无论查询的 x0 是多少,预测值都为 10。QUERY 4 和 QUERY -3 均输出 10.000000。
输入
6
ADD 1 2
ADD 2 4
ADD 3 5
ADD 4 7
QUERY 0
QUERY 5
输出
0.500000
8.500000
说明
当前 4 个样本为 (1,2)、(2,4)、(3,5)、(4,7)。
统计量为 n=4,Sx=1+2+3+4=10,Sy=2+4+5+7=18,Sxx=12+22+32+42=30,Sxy=1×2+2×4+3×5+4×7=53。
分母 nSxx−(Sx)2=4×30−102=20,不为 0,所以使用最小二乘公式。斜率 a=204×53−10×18=1.6,截距 b=418−1.6×10=0.5。
查询 x0=0 时,预测值 y^=1.6×0+0.5=0.5,输出 0.500000。
查询 x0=5 时,预测值 y^=1.6×5+0.5=8.5,输出 8.500000。
本题属于以下题库,请选择所需题库进行购买
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册