1. 基本概念
- 先验概率
事件发生前的预判概率。可以是基于历史数据的统计,可以由背景常识得出,也可以是人的主观观点给出。一般都是单独事件概率,如P(A),P(B)。 - 条件概率
一个事件发生后另一个事件发生的概率。一般的形式为P(A|B)表示B发生的条件下A发生的概率。 - 后验概率
事情已经发生,要求这件事情发生的原因是由某个因素引起的可能性的大小,即执果求因。
西瓜举例:
- 先验概率,就是常识、经验、统计学所透露出的“因”的概率,即瓜的颜色是青绿的概率。
- 条件概率,就是在条件为瓜的颜色是青绿的情况下,瓜是好瓜的概率。
- 后验概率,就是在知道“果”之后,去推测“因”的概率,也就是说,如果已经知道瓜是好瓜,那么瓜的颜色是青绿的概率是多少。
- 后验和先验的关系就需要运用贝叶斯决策理论来求解。
2. 贝叶斯决策理论
贝叶斯决策论是概率框架下实施决策的基本方法,对分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。
假设有N种可能的类别标记,即 Y = c 1 , c 2 , ⋯ , c N Y={c_1,c_2,\cdots,c_N} Y=c1,c2,⋯,cN , λ i j \lambda_{ij} λij是将类 c j c_j cj误分类为类 c i c_i ci所产生的损失,基于后验概率 P ( c i ∣ x ) P(c_i\vert x) P(ci∣x) 可获得将样本x分类为 c i c_i ci所产生的期望损失 ,即在样本x上的“条件风险”:

我们的任务是寻找一个判定准则 h,以最小化总体风险:

显然,对每个样本x,若h能最小化条件风险
R
(
h
(
x
)
∣
x
)
R(h(x)\vert x)
R(h(x)∣x),则总体风险R(h)也将被最小化。这就产生了贝叶斯判定准则:为最小化总体风险,只需要在每个样本上选择那个能使条件风险R(c|x)最小的类别标记,即:

此时,h 称作贝叶斯最优分类器,与之对应的总体风险R(h )称为贝叶斯风险,1-R(h*)反映了分类器能达到的最好性能,即机器学习所产生的模型精度的上限。
具体来说,若目标是最小化分类错误率(对应0/1损失),得到条件风险和最小化分类错误率的最优分类器分别为:

即对每个样本x,选择能使后验概率P(c|x)最大的类别标识。
4. 贝叶斯公式
基于贝叶斯定理,
P
(
c
∣
x
)
P(c\vert x)
P(c∣x)可写为:

其中P( c )是“先验概率”;P(x|c)是样本x对于类标记c的类条件概率,或称为“似然”;P(x)是用于归一化的“证据”因子。上式即为贝叶斯公式。
对于给定样x,证据因子P(x)与类标记无关因此估计P(x|c)问题就转化为如何基于训练数据集来估计先验概率 P ( c ) P(c) P(c)和似然P(x|c)。
类先验概率
P
(
c
)
P(c)
P(c)可以根据各类样本出现的频率来估计。
类条件概率P(x|c),它涉及关于x所有属性的联合概率,计算会有困难。
5. 极大似然估计
对于上诉类条件概率P(x|c)的估计,有一种常用的策略就是先假定其具有某种确定的概率分布形式,再基于训练样本对概率分布的参数进行估计。
令 D c D_c Dc表示训练集D中c类样本组成的集合,假设样本独立同分布,则参数 θ c \theta_c θc对于数据集的似然是:
P ( D c ∣ θ c ) = ∏ x ∈ D c P ( x ∣ θ c ) P(D_c\vert \theta_c)=\prod_{x\in D_c}P(x\vert \theta_c) P(Dc∣θc)=∏x∈DcP(x∣θc)
极大似然估计就是试图在 θ c \theta_c θc所有的可能取值中,找到一个能使数据出现可能性的最大值。
6. 朴素贝叶斯
基于贝叶斯公式来估计后验概率P(c|x)主要困难在于类条件概率P(x|c)是所有属性上的联合概率,难以从有限的训练样本直接估计而得。基于有限训练样本直接计算联合概率,在计算上将会遭遇组合爆炸问题;在数据上将会遭遇样本稀疏问题;属性越多,问题越严重。
为了避开这个障碍,朴素贝叶斯分类器采用了“属性条件独立性假设”:对已知类别,假设所有属性相互独立。
基于条件独立性假设,对于多个属性的后验概率可以写成:

d为属性数目,是x在第i个属性上取值。 对于所有的类别来说P(x)相同,基于极大似然的贝叶斯判定准则有朴素贝叶斯的表达式:

7.解决0概率问题
零概率问题,就是在计算实例的概率时,如果某个量x,在观察样本库(训练集)中没有出现过,会导致整个实例的概率结果是0.
朴素贝叶斯算法的先天缺陷:其他属性携带的信息被训练集中某个分类下未出现的属性值“抹去”,造成预测出来的概率绝对为0。为了拟补这一缺陷,前辈们引入了拉普拉斯平滑的方法:对先验概率的分子(划分的计数)加1,分母加上类别数;对条件概率分子加1,分母加上对应特征的可能取值数量。这样在解决零概率问题的同时,也保证了概率和依然为1:

8.代码实现
高斯朴素贝叶斯算法是假设特征的可能性(即概率)为高斯分布。
sklearn.naive_bayes.GaussianNB (priors=None, var_smoothing=1e-09)
参数:
priors:先验概率大小,如果没有给定,模型则根据样本数据自己计算(利用极大似然法)。
var_smoothing:可选参数,所有特征的最大方差
属性:
class_prior_:每个样本的概率
class_count:每个类别的样本数量
classes_:分类器已知的标签类型
theta_:每个类别中每个特征的均值
sigma_:每个类别中每个特征的方差
epsilon_:方差的绝对加值方法
方法:
fit(X,Y):在数据集(X,Y)上拟合模型。
get_params():获取模型参数。
predict(X):对数据集X进行预测。
predict_log_proba(X):对数据集X预测,得到每个类别的概率对数值。predict_proba(X):对数据集X预测,得到每个类别的概率。
score(X,Y):得到模型在数据集(X,Y)的得分情况。
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)
acc_score
#查看预测结果
Y_pred = gnb.predict(Xtest)
#查看预测的概率结果
prob = gnb.predict_proba(Xtest)
【参考资料】
1.西瓜书
2.DataWhale开源学习平台
3.菜菜的sklearn

1393

被折叠的 条评论
为什么被折叠?



