#P4597. 第2题-朴素贝叶斯二分类器

第2题-朴素贝叶斯二分类器

题目内容

请帮助小美实现一个朴素贝叶斯 (Multinomial(Multinomial NB)NB) 二分类器,在给定训练集后对测试集输出标签。

小美设计的算法步骤如下:

1.输入读取

  • traintrain 字段:二维列表,每行最后一列 yy∈{0,10,1},其余列为非负整数词频

  • testtest 字段:二维列表,仅含词频特征(维度与训练一致)

2.平滑:使用拉普拉斯平滑 k=1k=1

P(wc)=nc,w+1w(nc,w+1)P(w \mid c)=\frac{n_{c, w}+1}{\sum_{w^{\prime}}\left(n_{c, w^{\prime}}+1\right)}nc,wn_{c,w} 表示在所有训练样本中标签为 cc 时第 ww 个词的总频次。

3.先验概率:πc=NcN\pi_{c}=\frac{N_{c}}{N}NcN_c 为类别 cc 的样本数量,NN 为总样本数。

4.对数后验:对样本 xx 计算 logP(cx)=logπc+wxwlogP(wc)\log P(c \mid x)=\log \pi_{c}+\sum_{w} x_{w} \log P(w \mid c)

5.预测规则:若 logP(1x)logP(0x)logP(1|x)≥logP(0|x) 输出 11 ,否则 00

输入描述

{

"train": [[f11,...,f1m,y1],..., [fn1,...,fnm.yn]].

"test": [[t11,...,t1m],...,[tk1,...,tkm]]

}

行长度必须一致;train[i][:1]train [i][:-1]test[j]test[j] 均为非负整数词频。

输出描述

所有测试样本的预测标签 (0/1)(0/1) 按顺序放入 JSONJSON 数组,例如:[0,1,0][0,1,0]

补充说明

为保证结果唯一可复现,所有随机过程必须:

importimport numpynumpy asas npnp

np.random.seed(42)np.random.seed(42)

样例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]