朴素贝叶斯

朴素贝叶斯

参考:

  1. 菜菜的sklearn课堂10 - 朴素贝叶斯
  2. 课件
  3. 条件概率/全概率/贝叶斯公式 个人理解

真正的概率分类器

为什么称之为真正?

  • 在之前学习的算法中,我们都明白只根据训练集训练的模型是无法给出肯定的答案的,它只能尽量预测正确。而这个尽量,是人为强行定义的。比如逻辑回归的sigmoid函数,只要大于0.5我们就将其分为1。
    • 朴素贝叶斯是一种直接衡量标签和特征之间的概率关系的有监督算法,它既可以做回归也可以分类,不过多是用于分类之中。朴素贝叶斯的算法根源就是基于概率论和数理统计的贝叶斯理论,因此它是根正苗红的概率模型。也就是说它是真正基于概率的算法,真正计算的概率。

关于贝叶斯公式详见参考:
贝叶斯公式
这即是一切贝叶斯算法的根源理论。

后验概率

把特征X当成条件事件,要求解的标签Y当成是被满足条件后会被影响的结果,两者之间的概率关系就是P(Y|X),在机器学习中这个概率公式称之为是标签的后验概率(posterior probability),即是说我们先知道了条件,再去求解结果

先验概率

标签Y在没有任何条件限制下取值为某个值的概率记作P(Y),称之为标签的先验概率(prior probability)

为什么叫朴素

在机器学习中,对于每一个样本,都可能是包含n个特征的特征向量X={X1, X2, …. , Xn},那么:
后验概率
如果特征之间是独立的,那么可以结合条件概率与全概率化简进而求得P(X),P(X=X1,2,3…|Y):

简单来说,如果特征之间是有条件独立的,可以解决众多问题也可以简化很多计算,这就是朴素贝叶斯被称为“朴素”的理由。

朴素贝叶斯是一个不建模的算法,所需要的样本量比较少。当然,如果样本量少于特征数目,贝叶斯的效果就会被削弱。

sklearn中的朴素贝叶斯

含义
naive_bayes.BernoulliNB 伯努利分布下的朴素贝叶斯
naive_bayes.GaussianNB 高斯分布下的朴素贝叶斯
naive_bayes.MultinomialNB 多项式分布下的朴素贝叶斯
naive_bayes.ComplementNB 补充朴素贝叶斯
linear_model.BayesianRidge 贝叶斯岭回归,在参数估计过程中使用贝叶斯回归技术来包括正则化参数

高斯朴素贝叶斯GaussianNB

  • class sklearn.naive_bayes.GaussianNB (priors=None, var_smoothing=1e-09)
    通过假设某一类的特征服从正态分布,来估计每个特征下每个类别上的条件概率
    高斯贝叶斯
参数 含义
prior 可输入任何类数组结构,形状为(n_classes,)表示类的先验概率。如果指定,则不根据数据调整先验,如果不指定,则自行根据数据计算先验概率 P(Y)
var_smoothing 浮点数,可不填(默认值= 1e-9)在估计方差时,为了追求估计的稳定性,将所有特征的方差中最大的方差以某个比例添加到估计的方差中。这个比例,由var_smoothing参数控制。

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np
import matplotlib.pyplot as plt
from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split

digits = load_digits()
X, y = digits.data, digits.target
Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,y,test_size=0.3,random_state=420)

gnb = GaussianNB().fit(Xtrain,Ytrain) # 建模

#查看分数
acc_score = gnb.score(Xtest,Ytest) # 预测

#查看预测结果
Y_pred = gnb.predict(Xtest) # 返回每个样本的预测分类

#查看预测的概率结果
prob = gnb.predict_proba(Xtest) # 返回一个矩阵,每个样本所属每个分类的概率