一,贝叶斯公式
在统计学中,有两个较大的分支,一个是频率,一个是贝叶斯。贝叶斯公式如下所示:
- P(A)表示A出现的概率;
- P(B|A)表示A发生的条件下,发生B的概率,也被称为似然度
- P(A|B)表示B发生的条件下,发生A的概率,也被称为后验概率
贝叶斯公式预测事件发生概率的前提是发生了某种相关性。贝叶斯定理描述了在已知先验概率的情况下,如何根据新的观测数据来更新概率。
二,朴素贝叶斯分类算法
朴素贝叶斯算法基于贝叶斯定理进行分类。在分类问题中,我们希望找到给定特征条件下各个类别的后验概率,然后选择具有最高后验概率的类别作为预测结果。
简单来说,就是计算出单个样本属于各个类别的概率,最大的即判定属于此类型
假设我们有一个分类问题,要将样本数据集根据其特征分到不同的类别中。设特征向量为X = (x1, x2, ..., xn),类别为C
贝叶斯定理表示为:
朴素贝叶斯算法的“朴素”假设是假设各个特征之间相互独立,因此可以将 P(X∣C) 展开为各个特征的条件概率的乘积:
接下来,我们需要计算先验概率 P(C) 和各个特征的条件概率 P(xi∣C)。在训练阶段,可以通过统计训练数据来估计这些概率:
- P(C) :可以通过统计训练数据中各个类别出现的频率来估计。
- P(xi∣C):可以通过统计在给定类别下各个特征取值的频率来估计
通过以上步骤,我们可以得到各个类别的P(C) 和各个特征的条件概率 P(xi∣C)。然后,根据贝叶斯定理计算 P(C∣X) ,并选择具有最大后验概率的类别作为预测结果。
应用案例
假设一个学校有 45% 的男生和 55% 的女生,学校规定不能穿奇装异服,男生的裤子只能穿长筒裤,而女生可以穿裙子或者长筒裤,已知该学校穿长筒裤的女生和穿裙子的女生数量相等,所有男生都必须穿长筒裤,请问如果你从远处看到一个穿裤子的学生,那么这个学生是女生的概率是多少?
学校女生的概率:P(女生)= 0.55
女生中穿裤子的概率:P(裤子|女)= 0.5
学校中穿裤子的概率:P(裤子)= 0.45 + 0.275= 0.725
使用贝叶斯公式求解 P(女生|裤子) 的概率:
P(女|裤子) = P(裤子|女生) * P(女生) / P(裤子) = 0.5 * 0.55 / 0.725 = 0.379
分类
将朴素贝叶斯大致分为三种:多项式朴素贝叶斯(MultinomialNB)、伯努利分布朴素贝叶斯(BernoulliNB)、高斯分布朴素贝叶斯(GaussianNB)
高斯朴素贝叶斯适用于特征呈正态分布的,多项式贝叶斯适用于特征是多项式分布的,伯努利贝叶斯适用于二项分布。
三,算法实现
贝叶斯定理的算法在 sklearn 库中在naive_bayes包中
算法使用流程:
- 统计样本数,即统计先验概率 P(y) 和 似然度 P(x|y)。
- 根据待测样本所包含的特征,对不同类分别进行后验概率计算。
- 比较 y1,y2,...yn 的后验概率,哪个的概率值最大就将其作为预测输出。
实际应用:
#鸢尾花数据集
from sklearn.datasets import load_iris
#导入朴素贝叶斯模型,这里选用高斯分类器
from sklearn.naive_bayes import GaussianNB
#载入数据集
X,y=load_iris(return_X_y=True)
bayes_modle=GaussianNB()
#训练数据
bayes_modle.fit(X,y)
#使用模型进行分类预测
result=bayes_modle.predict(X)
print(result)
#对模型评分
model_score=bayes_modle.score(X,y)
print(model_score)
输出为: