#P4834. 第3题-近邻迁移正则系数
-
1000ms
Tried: 45
Accepted: 10
Difficulty: 5
所属公司 :
携程
时间 :2026年4月23日-算法岗
算法与标签>机器学习算法
第3题-近邻迁移正则系数
解题思路
风控任务用 K 近邻从历史任务里迁移正则系数 C,再训练逻辑回归。
- 元特征:当前任务 mctr=[n, d, ∣npos−nneg∣/n]。
- 检索:计算到每条 history.meta 的 ℓ2 距离,按 (距离,行号) 升序取前 K=3 条。
- 选 C∗:对这
3个邻居中出现过的每个 C 求 score 均值(未出现则忽略),取均值最大者;并列取更小的 C。 - 拟合:LogisticRegression(penalty="l2",C=C∗,solver="lbfgs",max_iter=1000,random_state=42) 在完整训练集上训练,输出测试标签
0/1。
题目内容
风控实验室接到一批新的二分类样本,需要尽快选定逻辑回归的正则系数 C 并给出测试标签。实验室规定:不得对当前任务重新网格搜索 C,只能借鉴历史任务的在线最优 C 与评分,用 K 近邻做超参数元学习。你需要根据历史元数据表以及当前任务的训练/测试数据,实现该流程。
- 数据集元特征:对每个数据集计算三维向量 m=[samples, features, imbalance],其中 samples 为训练样本数 n,features 为特征维数 d,imbalance 为 ∣npos−nneg∣/n。
- K 近邻检索:history 中每行给出 meta、C、score(越大越好)。计算当前任务元向量到所有历史元向量的 ℓ2 距离,取 K=3 个最近邻;距离并列时按行次序决定。
- 汇聚选 C∗:对这
3行统计出现过的 C,计算各 C 的平均 score(某邻居未出现该 C 则忽略),取平均分最高者;并列时取数值最小的 C。 - 模型训练与预测:使用 LogisticRegression(penalty="l2", C=C∗, solver="lbfgs", max_iter=1000, random_state=42) 在完整训练集上拟合,输出测试集标签。
不得另行搜索其它 C;随机源固定 random_state = 42。仅允许使用 numpy、pandas、scikit-learn。
约束:训练样本数不超过 60,测试样本数不超过 15,特征维数不超过 4;history 至少 6 条,C 取值于 {0.1,0.3,1,3,10};所有值为数值型且无缺失。
输入描述
输入为单行 JSON 对象,字段为:
- train_X:训练集特征二维数组;
- train_y:训练集标签数组,元素为
0或1; - test_X:测试集特征二维数组;
- history:历史记录数组,每项含 meta(三维向量)、C 与 score。
保证训练样本数不超过
60,测试样本数不超过15,特征维数不超过4,history 至少6条,C∈{0.1,0.3,1,3,10}。
输出描述
输出一行 JSON 对象,包含:
- C_star:选出的正则系数;
- pred:测试集预测标签数组,长度为测试样本数,元素为
0或1。
样例1
输入
{"train_X":[[2.0,2.0],[2.2,1.8],[1.7,2.1],[2.4,2.3],[0.0,0.1],[-0.1,0.2],[0.2,-0.1],[-0.2,0.0]],"train_y":[1,1,1,1,0,0,0,0],"test_X":[[2.1,2.0],[-0.1,0.1]],"history":[{"meta":[80,2,0.05],"C":0.3,"score":0.91},{"meta":[70,3,0.12],"C":1.0,"score":0.88},{"meta":[90,2,0.00],"C":0.1,"score":0.86},{"meta":[30,4,0.40],"C":10.0,"score":0.70},{"meta":[75,2,0.08],"C":3.0,"score":0.84},{"meta":[85,2,0.04],"C":0.3,"score":0.90}]}
输出
{"C_star": 1.0, "pred": [1, 0]}
说明
当前任务样本数 8、维数 2,两类各半,imbalance 为 0。按 ℓ2 距离取 3 个历史近邻,对出现过的 C 求平均 score,得到 C∗=‘1.0‘。
用该系数训练逻辑回归后:测试点 (2.1,2.0) 靠近正类,预测 1;(−0.1,0.1) 靠近负类,预测 0。
样例2
输入
{"train_X":[[0.0,0.0,0.0],[0.1,0.0,0.1],[0.0,0.2,0.0],[3.0,3.0,3.0],[3.1,2.9,3.2],[2.8,3.1,2.9]],"train_y":[0,0,0,1,1,1],"test_X":[[0.05,0.05,0.0],[3.0,3.0,2.9]],"history":[{"meta":[6,3,0.00],"C":1.0,"score":0.95},{"meta":[10,3,0.20],"C":0.1,"score":0.70},{"meta":[8,2,0.10],"C":3.0,"score":0.80},{"meta":[12,4,0.25],"C":10.0,"score":0.60},{"meta":[7,3,0.05],"C":1.0,"score":0.92},{"meta":[9,3,0.00],"C":0.3,"score":0.88}]}
输出
{"C_star": 1.0, "pred": [0, 1]}
说明
三维特征、两类可分。历史中与当前元向量最近的记录偏向 C=‘1.0‘ 且平均分更高,选定后再拟合逻辑回归。两个测试点分别落在两类簇中,预测为 0 与 1。
请从“运行结果”或“历史提交”选择一条记录并点击「开始AI分析」
选择提交后点击「开始AI分析」