解题思路
本题要求仅使用 numpy 实现完整的二分类训练流程,模型为逻辑回归。
首先,使用训练集特征按列计算均值 μ 和标准差 σ,标准差使用 ddof=0。若某一列的 σ=0,则将其改为 1,避免除零。然后使用训练集得到的 μ 和 σ 对 train、val、test 做相同标准化。
模型使用逻辑回归:
P4911.第2题-带调度的逻辑回归
题目描述
小美正在处理一个二分类任务,她希望你帮她在仅依赖 numpy 的前提下,完整实现下面她设计的
“端到端”二分类训练流程,并对测试集输出预测标签。
所有细节都已确定;任何遗漏或自由发挥都会导致结果与评测不符。
1. 数据预处理
i. 按列计算训练集均值 μ、标准差 σ(ddof = 0)
ii. 对 train / val / test 逐列标准化:x′=σx−μ(σ=0→σ=1)
2. 模型定义
L=−N1i∑(yilny^i+(1−yi)ln(1−y^i))+2λ∥w∥22
- 正则系数 λ=1e−4
3. 优化器 & 学习率调度
优化器:Adam
初始学习率:0.01
β1/β2:0.9 / 0.999
ϵ:1e-8
批大小:16(最后不足 16 取剩余)
Warm-up:前 5 epochs,学习率线性从 0 → 0.01;第 6 epoch 起固定 0.01
4. Early-Stopping
- 最多 100 epochs
- 监控验证集损失 L
- 若连续 10 个 epoch 无“< 最佳损失 -1e-6”的改进 → 停止
- 训练完成后恢复到验证集最佳权重
5. 推断与输出
i. 计算测试集概率 p
ii. 阈值 0.5 → 标签 1,否则 0
输入描述
单行 JSON:
{
"train": [[f1, ..., fd, y], ...],//训练集
"val": [[f1, ..., fd, y], ...],//验证集
"test": [[f1, ..., fd], ...]//测试集
}
- y∈{0,1}
- 全部数值特征,无缺失值
- 维度 d≥1,各集样本数 ≥16
输出描述
单行 JSON 数组输出,例如 [0, 1, 0]
补充说明
- 唯一随机来源是打乱 mini-batch:为确保通过测试用例必须
np.random.seed(42) 后 np.random.permutation
- 初始化 w、b 全部 0
示例 1
输入
{"train":[[-3,-3,0],[-2.5,-2.5,0],[-3.1,-2.9,0],[3,3,1],[2.7,3.2,1],[3.3,2.8,1]],"val":[[-2.8,-2.9,0],[3.1,2.9,1]],"test":[[-3,-3],[3,3]]}
输出
[0, 1]