在了解朴素贝叶斯法之前,我们首先需要了解贝叶斯定理 # 贝叶斯定理 ### 全概率公式 由条件概率公式: $$ P(A \mid B)=\frac{P(A \cap B)}{P(B)} $$ 对一个事件组X={X1,X2,X3,...,Xn},任意一个事件C的概率可得全概率公式: $$ P(C)=\sum_{I=1}^{n} P\left(X_{i}\right) P\left(C \mid X_{i}\right) $$ ### 贝叶斯公式 在已知条件概率的基础上,我们可以很容易计算贝叶斯公式 $$ P\left(X_{k} \mid C\right)=\frac{P\left(C \mid X_{k}\right) * P\left(X_{k}\right)}{P(C)} $$ 代入P(C)得到 $$ P\left(X_{k} \mid C\right)=\frac{P\left(C \mid X_{k}\right) * P\left(X_{k}\right)}{\sum_{k=1}^{n} P\left(X_{k}\right) P\left(C \mid X_{k}\right)} $$ 将贝叶斯公式带入到机器学习当中,我们可以发现以下规则 $$ \mathrm{p}(\text { 类别 | 特征 })=\frac{p(\text { 特征 | 类别)p(类别 })}{\mathrm{p}(\text { 特征 })} $$ # **朴素贝叶斯算法** ### **算法简介** 朴素贝叶斯法只满足“所有特征之间都是独立的”的条件(即假设一个样本有n个特征,那么P(x1,x2,x3,x4,...,xn)=P(x1)P(x2)P(x3)...P(xn)),其分类原理就是利用贝叶斯公式根据某对象的先验概率计算出其后验概率,然后选择具有最大后验概率的类作为该对象所属的类。 ### 实例讲解 举个例子,在相亲市场上,对于男方,有以下几个特征(长相是否帅气、性格是否好、身高是否高、是否上进)从而评判最终结果(接受/不接受)。给定特征后,我们就可以将这个决策转换为数学问题。 比如,当一个长相帅气,性格优越,身高高且上进的男生,女方会如何做出决策呢?我们只要计算P(接受丨帅气,性格好,身高高,上进)与P(不接受丨帅气,性格好,身高高,上进)并进行比较就可以了。 ### 算法特点 1. 在数据较少的时候依然有效,可以处理多类别的问题 2. 对于输入数据的准备方式较为敏感 # 代码实现 同样以鸢尾花为例: ```python # 导入数据 from sklearn import datasets iris = datasets.load_iris() x = iris.data y = iris.target # 数据分类 from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0) # 模型训练与预测 from sklearn.naive_bayes import MultinomialNB, GaussianNB Bys = GaussianNB(var_smoothing=1e-8) Bys.fit(x_train,y_train) import numpy as np from sklearn import metrics pred = Bys.predict(x_test) accuracy = metrics.accuracy_score(y_test,pred) print(accuracy) ``` # 作业 使用sklearn提供的朴素贝叶斯的API对手写数字数据集的数据进行预测,并尝试将预测的结果以可视化的方式展示。手写数字数据集使用方法如下: ```python from sklearn.datasets import load_digits digits = load_digits() ``` # 参考来源 1. [https://zhuanlan.zhihu.com/p/26262151](https://zhuanlan.zhihu.com/p/26262151) 2. 《机器学习实战》Peter Harrington