会员专享
请先
登录,登录后可使用今日免费解锁;
开通会员后可解锁完整内容。
解题思路
核心思路
整条链路是固定的四个环节:清洗、标准化、带动量的批量梯度下降、反标准化输出。每一步的统计量都只用 q=1 的有效样本,测试样本不能参与统计,否则训练与预测用的尺子不一致。
标准化之后特征各维量纲一致,梯度下降的收敛不再受原始量纲影响;在标准化空间里训练完,预测值再乘回 stdy 加 meany 即可还原到原始标签空间。
实现方法
题目内容
端侧 AI 模型需要根据设备采集的历史数据在线更新参数,再对新样本做预测。给定一批带质量标记的多维样本,要求先清洗数据、再做标准化,然后用带动量的批量梯度下降(含 L2 正则)训练线性回归模型,最后输出对测试样本的预测值。
数据清洗:每条样本带质量标记 q。q=0 的样本是脏数据,直接丢弃,不参与后续任何统计与训练;q=1 为有效样本。记有效样本数为 N。
标准化:对全部有效样本,逐维计算均值与标准差(总体标准差,即除以 N):
meanj=N1i∑xi,j,stdj=N1i∑(xi,j−meanj)2
若 stdj=0,该维标准化后恒为 0;否则 zi,j=stdjxi,j−meanj。标签同样处理,得到 meany,stdy 与 y~i(stdy=0 时 y~i=0)。训练集与测试集使用同一组统计量。
模型与目标:在标准化后的标签空间做回归 y^i=∑jwjzi,j+b,目标为
L=2N1i∑(y^i−y~i)2+2λj∑wj2
梯度与动量更新:参数与动量缓存初值均为 0,每轮做一次批量更新(t=1,2,…,T):
gwj=N1i∑(y^i−y~i)zi,j+λwj,gb=N1i∑(y^i−y~i)
vwj←μvwj+gwj,wj←wj−ηvwj,vb←μvb+gb,b←b−ηvb
L2 正则只作用于权重 wj,不作用于偏置 b。迭代 T 轮后停止。
预测:测试样本先用训练集的统计量标准化,算出 y^=∑jwjzj+b,再反标准化输出
y=meany+stdy⋅y^
stdy=0 时直接输出 meany。所有运算使用双精度浮点。
输入描述
第一行三个整数 n,d,m,分别是样本条数、特征维数、测试样本条数。
第二行四个实数 η,μ,λ,T,分别是学习率、动量系数、正则系数、迭代轮数(T 为整数)。
接下来 n 行,每行 d+2 个实数,依次为质量标记 q、d 个特征值、标签 y:
q f1 f2 ... fd y
接下来 m 行,每行 d 个实数,为一个测试样本的 d 个特征值。
约束
- 1≤n≤2000,1≤d≤8,1≤m≤100;
- 0<η≤1,0≤μ<1,0≤λ≤1,1≤T≤500;
- q∈{0,1};特征值与标签均为实数,绝对值不超过 1000,小数位数不超过 6;
- 保证 q=1 的样本至少有一条。
输出描述
输出 m 行,第 k 行为第 k 个测试样本的预测值,四舍五入保留 4 位小数。判定误差为 10−4。
样例1
输入
4 1 2
0.1 0.9 0.01 2
1 1 2
1 2 4
1 3 6
0 10 100
4
1
输出
5.1196
3.4402
说明
第 4 条样本 q=0 被丢弃,有效样本 N=3:(1,2),(2,4),(3,6)。
meanx=2,stdx=2/3≈0.816497;meany=4,stdy=8/3≈1.632993。本例标签与特征线性相关,标准化后 y~ 与 z 相同:(−1.224745,−1.224745)、(0,0)、(1.224745,1.224745)。
第 1 轮:w=b=0,残差为 −y~,gw=31∑(−y~izi)+λ⋅0=−1,gb=0;vw=0+(−1)=−1,w=0−0.1×(−1)=0.1。
第 2 轮:残差为 0.1z−y~=−0.9z,gw=−0.9+0.01×0.1=−0.899;vw=0.9×(−1)+(−0.899)=−1.799,w=0.1−0.1×(−1.799)=0.2799,b=0。
测试 x=4:z=0.8164974−2=2.449490,y^=0.2799×2.449490=0.685612,y=4+1.632993×0.685612=5.1196。测试 x=1 同理得 4−0.5598=3.4402。
样例2
输入
2 2 3
0.5 0.5 0.1 1
1 1 5 3
1 3 5 7
2 5
3 5
0 9
输出
5.0000
6.0000
3.0000
说明
有效样本 N=2。第 1 维:mean1=2,std1=1;第 2 维恒为 5,std2=0,按规则标准化后恒为 0,对预测没有贡献。标签:meany=5,stdy=2。
标准化后样本为 (z=(−1,0),y~=−1) 与 (z=(1,0),y~=1)。
T=1:残差为 (1,−1),gw1=21×(−1)+(−1)×1=−1,gw2=0,gb=0;vw1=0.5×0+(−1)=−1,w1=0−0.5×(−1)=0.5(首轮 wj=0,正则项为 0)。
预测:(2,5) 的 z1=0,y^=0,y=5;(3,5) 的 z1=1,y^=0.5,y=5+2×0.5=6;(0,9) 的 z1=10−2=−2,第 2 维仍按训练集的 std2=0 记为 0,y^=−1,y=5+2×(−1)=3。