按给定公式用归一化梯度下降拟合权重 w。目标为
f(w)=21∥Xw−y∥22+λ∥w∥22梯度为
风控实验室要给一批信贷样本拟合线性评分器。训练数据给出特征矩阵 X 与标签 y,测试数据只给出特征。实验室规定必须用手写的归一化梯度下降更新权重,且实现时只允许使用 numpy。
目标函数为
f(w)=21∥Xw−y∥22+λ∥w∥22。
梯度为 ablaf=X⊤(Xw−y)+2λw。先把梯度归一化为单位 L2 向量
g^=max(∥ablaf∥2,ε)ablaf,
其中 ε=10−10。若 ∥ablaf∥2<ε,或梯度中出现非有限值,则跳过本步更新但仍计入迭代次数。
学习率 ηt=tη0,t=1,2,…,T。更新为 wt+1=wt−ηtg^。
固定参数:η0=0.2,λ=0.01,迭代步数 T=60。权重初值 w0 为全 0 向量。
得到 wT 后,对测试矩阵 Xtest 计算 y^=XtestwT,再取符号:结果 ≥0 记为 1,否则记为 0。
约束:训练样本数 n 不超过 60,测试样本数 m 不超过 15,特征维 d 不超过 6。所有值为实数且不含缺失。
标准输入仅一行 JSON 对象,包含三个键:train_X 为 n×d 的二维实数数组,train_y 为长度 n 的实数数组,test_X 为 m×d 的二维实数数组。保证 n≤60,m≤15,d≤6。
输出一行 JSON 对象,包含键 weights 与 test_pred:weights 是长度 d 的数组,每个分量用四舍五入保留 6 位小数;test_pred 是长度 m 的数组,元素仅为 0 或 1。
输入
{"train_X":[[1,0],[0,1],[2,2]],"train_y":[0,0,1],"test_X":[[0.5,0.5],[3,3]]}
输出
{"weights": [0.221729, 0.221729], "test_pred": [1, 1]}
说明
共有 3 条训练样本、特征维为 2,以及 2 条测试样本。
按 η0=0.2、λ=0.01 迭代 60 步后得到权重,再对测试点取符号分类。
输入
{"train_X":[[0],[1],[2],[3]],"train_y":[0,0,1,1],"test_X":[[-2],[0.2],[2.5]]}
输出
{"weights": [0.35685], "test_pred": [0, 1, 1]}
说明
一维特征。迭代后权重为正,因此负测试点打分小于 0 判为 0,正测试点判为 1。
权重保留 6 位小数。
输入
{"train_X":[[-1,-1],[1,1],[-0.5,0.5]],"train_y":[0,1,0],"test_X":[[-2,-2],[2,2]]}
输出
{"weights": [0.248902, 0.248902], "test_pred": [0, 1]}
说明
训练点分布在不同象限。迭代结束后对两个测试点做线性打分并取符号。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册