一、概念
朴素贝叶斯分类器是一种基于贝叶斯定理的弱分类器,所有朴素贝叶斯分类器都假定样本每个特征与其他特征都不相关。举个例子,如果一种水果其具有红,圆,直径大概3英寸等特征,该水果可以被判定为是苹果。尽管这些特征相互依赖或者有些特征由其他特征决定,然而朴素贝叶斯分类器认为这些属性在判定该水果是否为苹果的概率分布上独立的。所谓 "朴素" 就是假设不同的特征是相互独立的。
二、原理
特征条件假设:假设每个特征之间没有联系,给定训练数据集,其中每个样本x都包括n维特征,即,类标记集合含有种类别,即
对于给定的新样本x,判断其属于哪个标记的类别,根据贝叶斯定理,可以得到x属于类别的概率:
后验概率最大的类别记为预测类别,即:
朴素贝叶斯算法对条件概率分布作出了独立性的假设,通俗地讲就是说假设各个维度的特征互相独立,在这个假设的前提上,条件概率可以转化为:
代入上面贝叶斯公式中,得到:
于是,朴素贝叶斯分类器可表示为:
因为对所有的,上式中的分母的值都是一样的,所以可以忽略分母部分,朴素贝叶斯分类器最终表示为:
适用范围:
- 朴素贝叶斯只适用于特征之间是条件独立的情况下,否则分类效果不好,这里的朴素指的就是条件独立。
- 朴素贝叶斯主要被广泛地使用在文档分类中。
朴素贝叶斯常用的三个模型有:
- 高斯模型:处理特征是连续型变量的情况。
- 多项式模型:最常见,要求特征是离散数据。
- 伯努利模型:要求特征是离散的,且为布尔类型,即true和false,或者1和0。
二、优缺点
优点:朴素贝叶斯算法分类效率稳定,支持多分类任务,对缺失数据不敏感,算法简单,模型容易解释,计算量小,支持海量数据以及支持增量式计算,可用作在线预测。
缺点:朴素贝叶斯需要先验概率,不同值对结果有影响,分类决策存在错误率以及“朴素”的假设对结果影响大。在朴素贝叶斯的分类模型中,假设输入变量之间是独立的,这个假设在实际数据中可能不成立,但该技术在大量复杂问题上仍然表现出色。
三、应用
朴素贝叶斯算法假设所有特征的出现相互独立互不影响,每一特征同等重要,又因为其简单,而且具有很好的可解释性一般。相对于其他精心设计的更复杂的分类算法,朴素贝叶斯分类算法是学习效率和分类效果较好的分类器之一。朴素贝叶斯算法一般应用在文本分类,垃圾邮件的分类,信用评估,钓鱼网站检测等。
算法实战:
1、库函数导入
import warnings
warnings.filterwarnings('ignore')
import numpy as np
# 加载莺尾花数据集
from sklearn import datasets
# 导入高斯朴素贝叶斯分类器
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
2、数据导入
X, y = datasets.load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
我们需要计算两个概率分别是(1)条件概率:
(2)类目Ck的先验概率
通过分析发现训练数据是数值类型的数据,这里假设每个特征服从高斯分布,因此我们选择高斯朴素贝叶斯来进行分类计算。
3、模型训练
# 使用高斯朴素贝叶斯进行计算
clf = GaussianNB(var_smoothing=1e-8)
clf.fit(X_train, y_train)
4、模型预测
# 评估
y_pred = clf.predict(X_test)
acc = np.sum(y_test == y_pred) / X_test.shape[0]
print("Test Acc : %.3f" % acc)
# 预测
y_proba = clf.predict_proba(X_test[:1])
print(clf.predict(X_test[:1]))
print("预计的概率值:", y_proba)
'''
Test Acc : 0.967
[2]
预计的概率值: [[1.63542393e-232 2.18880483e-006 9.99997811e-001]]
'''
5、原理简析
高斯朴素贝叶斯假设每个特征都服从高斯分布,我们把一个随机变量X服从数学期望为μ,方差为σ2的数据分布称为高斯分布。对于每个特征我们一般使用平均值来估计μ和使用所有特征的方差估计σ2。
从上述例子中的预测结果中,我们可以看到类别2对应的后验概率值最大,所以我们认为类目2是最优的结果。
实例
朴素贝叶斯法 = 贝叶斯定理 + 特征条件独立。
根据天气和是否是周末预测一个人是否会出门。
根据上述数据,为了更好的理解计算过程,我们给出几个计算公式:
a. 当出门的条件下,X1是天气不好的概率:
b. 出门的概率
c. X1天气不好的概率
d. 在X1天气不好的情况下,出门的概率:
e. 在X1天气不好的情况下,不出门的概率: