Naive Bayes Review
笔试题中遇到了 朴素贝叶斯算法 的实现,这里对朴素贝叶斯算法做个简单回顾。
朴素贝叶斯算法
朴素贝叶斯算法是一个相对比较简单的机器学习算法,是基于贝叶斯定理和特征独立假设的分类方法。
对于给定的训练集(设共 $m$ 条训练数据,$n$ 种特征,$t$ 种类别 $0, 1, …, t-1$)
可以先得到各个类别的先验概率分布:
$$
P(Y=k)= |{y_i = k }|/m, \quad i=0, 1, …, m-1 \tag{0}
$$
在特征条件独立性假设下, 有条件概率分布:
$$
P(X=x|Y=k)=\prod_{j=0}^{n-1}P(X^j=x^j|Y=k) \tag{1}
$$
根据贝叶斯定理可以得到后验概率分布:
$$
P(Y=k|X=x)=\frac{P(Y=k)\prod_jP(X^j=x^j|Y=k)}{\sum_kP(Y=k)\prod_jP(X^j=x^j|Y=k)}
\tag{2}
$$
使得后验概率最大的类别即分类器需要输出的类别,对于输入 $x$,式 $(2)$ 的分母对于所有类别都是相同的,所以朴素贝叶斯分类器可表示为:
$$
y=f(x) =\underset{k}{argmax}P(Y=k)\prod_jP(X^j=x^j|Y=k)
\tag{3}
$$
笔试题
朴素贝叶斯分类器假设在给定样本 label 的情况下,样本的不同特征之间相互独立。
现用朴素贝叶斯分类器进行垃圾邮件识别,数据包含 4 个特征。
现在将所有的特征进行转换后,得到下表(请在程序以硬编码方式读入);
转换规则如下: (注: [m,n]表示m,n之间的闭区间,[m,+]表示大于m的开区间)标题长度(feature1) : 1: [0,3], 2: [3,6],3: [6,+]
正文长度(feature2) : 1: [0,10], 2: [10,20], 3: [20,+]
附件含有可执行程序(feature3) : 1:是,0:否
正文含特殊字符(feature4) : 1:是,0:否请在程序中读入上述训练数据,实现朴素贝叶斯分类器,语言不限,但不能使用第三方库,
不需要考虑平滑方法,然后对给定的测试数据(特征已转换)进行预测,输出结果;输入描述:
输入数据如下,第一行一个数字 M,表示共有 M 行训练数据,
第 2~M+1 行,每行 5 个数字,分别以空格隔开,前四个数字分别代表四个特征,第
5 个数字代表这一个样本 label 值。
第 M+2 行是一个数字 N,表示共有 N 行测试样本,随后的 N 行每行 4 个数字,分别代表四个特征的值。输出描述:
使用贝叶斯模型对测试样本进行预测,所有结果按顺序输出到一行,以空格分隔;
对应该笔试题的 Python 代码:
1 | """ |