这道题按照题意直接模拟即可,使用的算法是多项式朴素贝叶斯二分类。
已知:
train 中每一行最后一列是标签 y∈{0,1}test 中只有词频特征请帮助小美实现一个朴素贝叶斯 (Multinomial NB) 二分类器,在给定训练集后对测试集输出标签。
小美设计的算法步骤如下:
1.输入读取
train 字段:二维列表,每行最后一列 y∈{0,1},其余列为非负整数词频
test 字段:二维列表,仅含词频特征(维度与训练一致)
2.平滑:使用拉普拉斯平滑 k=1
P(w∣c)=∑w′(nc,w′+1)nc,w+1,nc,w 表示在所有训练样本中标签为 c 时第 w 个词的总频次。
3.先验概率:πc=NNc,Nc 为类别 c 的样本数量,N 为总样本数。
4.对数后验:对样本 x 计算 logP(c∣x)=logπc+∑wxwlogP(w∣c)
5.预测规则:若 logP(1∣x)≥logP(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]
为保证结果唯一可复现,所有随机过程必须:
import numpy as np
np.random.seed(42)
输入
{"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]