请帮助小美实现一个朴素贝叶斯(Multinomial NB)二分类器,在给定训练集后对测试集输出标签。
小美设计的算法步骤如下:
1. 输入读取
• train 字段:二维列表,每行最后一列 y ∈ {0,1},其余列为非负整数词频
• test 字段:二维列表,仅含词频特征(维度与训练一致)
2. 平滑:使用拉普拉斯平滑 k = 1
P(w c)=n_c,w+1Σ_w’(n_c,w’+1) , n_c,w 表示在所有训练样本中标签为 c 时第 w 个词的总频次。
3. 先验概率: _c=(N_c/N) , N_c 为类别 c 的样本数量,N 为总样本数。
4. 对数后验:对样本 x 计算
log P(c x)=log_c+Σ_w x_wlog P(w c)
5. 预测规则:若 log P(1|x) ≥ log P(0|x) 输出 1,否则 0。{
"train": [[f11,…,f1m,y1], …, [fn1,…,fnm,yn]],
"test": [[t11,…,t1m], …, [tk1,…,tkm]]
}
行长度必须一致;train[i][:-1] 与 test[j] 均为非负整数词频。
所有测试样本的预测标签(0/1)按顺序放入 JSON 数组,例如: [0,1,0]
{"train":[[2,0,0,0],[3,1,0,0],[0,0,2,1],[0,1,3,1]],"test":[[1,0,0],[0,1,2]]}[0, 1]
考点:二分
限制 1 秒 / 256MB | 标准输入输出
参考方向:二分
把「求最优值」转化为「判定某值是否可行」,用单调性二分逼近答案。
思路框架(二分 通法 · 非本题专属)
实现要点:模板:while (lo < hi) { mid = (lo+hi)/2; if (check(mid)) hi = mid; else lo = mid+1; } 求最小可行值。
复杂度:时间 O(check 的代价 × log(答案范围)) | 空间 O(1)
该范式的通法易错点
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。
样例 1
{"train":[[2,0,0,0],[3,1,0,0],[0,0,2,1],[0,1,3,1]],"test":[[1,0,0],[0,1,2]]}[0, 1]解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2026年春招-美团-算法策略岗-第一批笔试。