请你在仅使用 numpy / pandas的前提下,手写实现高斯朴素贝叶斯(Gaussian Naive Bayes,GNB),并对给定测试样本输出类别预测。具体流程:
1. 读取数据
• train 字段:二维列表,每行最后一列为类别标签 y∈{0,1},其余为数值特征
• test 字段:二维列表,仅包含与训练集同维度的特征
2. 参数估计
• 对每个类别 c 计算先验 _c = (N_c/N)
• 对每个特征计算类条件独立假设下的 均值 _cj 与 方差 _cj^2 (总体方差 ddof=0;若方差为 0,令 _cj^2 = 1e-9 )
3. 预测
• 使用对数后验:
log P(c x)=log_c+Σ_j [-12log(2_cj^2) -(x_j-_cj)^22_cj^2]
• 取 _c log P(c x) 作为预测标签
4. 结果输出
• 预测值保留整数 0/1,以 JSON 数组形式一次性输出,顺序与输入 test 保持一致标准输入为 一行 JSON: • n 行训练样本,m 维特征,最后一列为标签 • 所有值均为浮点数 / 整数,无额外空行
标准输出仅含一行:即测试集中每个样本的预测标签(整数),使用单行 JSON 数组表示。
{"train": [[1,1,0],[1.1,0.9,0],[4,4,1],[4.2,3.8,1]], "test": [[1,1],[4,4]]}[0, 1]
考点:模拟
限制 3 秒 / 256MB | 标准输入输出
推荐方向:模拟
本题切入点
按给定流程实现高斯朴素贝叶斯:类别先验 + 类条件均值/方差(ddof=0,方差为 0 时置 1e-9),用对数后验避免下溢,最后取后验最大的类别。
不涉及复杂算法,把题目描述的流程原样翻译成代码逐步执行即可。
思路框架(模拟 通法 · 非本题专属)
实现要点:结构上通常是一个外层循环包住若干 if/else 分支;只要状态定义清楚,正确率很高。
复杂度:时间 O(操作次数) | 空间 O(状态数)
该范式的通法易错点
样例 1
{"train": [[1,1,0],[1.1,0.9,0],[4,4,1],[4.2,3.8,1]], "test": [[1,1],[4,4]]}[0, 1]解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2025年秋招-美团-算法策略端-第二批笔试。