贝叶斯②——贝叶斯3种分类模型及Sklearn使用(高斯&多项式&伯努利)

贝叶斯机器学习系列:
贝叶斯①——贝叶斯原理篇(联合概率&条件概率&贝叶斯定理&拉普拉斯平滑)
贝叶斯③——Python实现贝叶斯文本分类(伯努利&多项式模型对比)
贝叶斯④——Sklean新闻分类(TF-IDF)
贝叶斯⑤——搜狗新闻分类实战(jieba + TF-IDF + 贝叶斯)
贝叶斯⑥——银行借贷模型(贝叶斯与决策树对比)

一、高斯模型

大家在学习高等数学时,应该学过高斯分布,也就是正态分布,是一种连续型变量的概率分布。简单来说,高斯分布就是当频率直方图的区间变得特别小时的拟合曲线,像座小山峰,其中两端的特别小,越往中间越高。

现实生活中有很多现象均服从高斯分布,比如年龄,收入,身高,体重等,大部分都处于中等水平,特别少和特别多的比例都会比较低。

高斯概率分布是由均值μ和标准差σ唯一确定的,如下图所示
贝叶斯②——贝叶斯3种分类模型及Sklearn使用(高斯&多项式&伯努利)_第1张图片
在贝叶斯分类中,高斯模型就是用来处理连续型特征变量的,当使用此模型时,我们会假定特征属于高斯分布,然后基于训练样本计算特征均值和标准差,这样就可以得到此特征下每一个属性值的先验概率。

在Sklearn库中高斯模型对应于GaussianNB(),只有一个参数:先验概率priors,即类别的先验概率, 如果不给则直接用类别数/总数得到类别概率

使用GaussianNB()拟合后,可以调用3个方法
①predict:与决策树一样,直接给出分类结果
②predict_proba: 给出每一个测试集样本属于每个类别的概率,最大的就是分类结果
③ predict_log_proba: predict_proba的对数转化,最大的就是分类结果

下面给出Sklearn代码:

from sklearn import naive_bayes
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn import metrics

# 导入数据
data,target = datasets.load_iris(return_X_y=True)
print(data.shape,target.shape)
# 拆分为训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(data,target,train_size=0.3)

# 高斯模型
clf = naive_bayes.GaussianNB()
clf.fit(x_train,y_train)
y_pred = clf.predict(x_test)
y_pred_proba = clf.predict_proba(x_test)
y_pred_log_proba = clf.predict_log_proba(x_test)
print(y_pred[:5])
print(y_pred_proba[:5])
print(y_pred_log_proba[:5])
print('训练集评分:', clf.score(x_train,y_train))
print('测试集评分:', clf.score(x_test,y_test))
print("精准率:", metrics.accuracy_score(y_test,y_pred))

贝叶斯②——贝叶斯3种分类模型及Sklearn使用(高斯&多项式&伯努利)_第2张图片

二、多项式模型

与高斯分布相反,多项式模型主要适用于离散特征的先验概率计算。公式如下:
在这里插入图片描述
其中,P(Xj=xjl|Y=Ck)是第k个类别的第j维特征的第l个个取值条件概率。mk是训练集中输出为第k类的样本个数。λ 为一个大于0的常数,常常取为1,即拉普拉斯平滑。也可以取其他值。简单来说就是贝叶斯定理求条件概率 + 拉普拉斯平滑

Sklearn库中对应于 MultinomialNB(),有3个参数
alpha:常数λ,如果你没有特别的需要,用默认的1即可。如果发现拟合的不好,需要调优时,可以选择稍大于1或者稍小于1的数。
fit_prior:表示是否要考虑先验概率,如果是false, 则所有的样本类别输出都有相同的类别先验概率。否则可以自己用第三个参数class_prior输入先验概率,或者不输入第三个参数class_prior让MultinomialNB自己从训练集样本来计算先验概率,此时的先验概率为P(Y=Ck)=mk/m。其中m为训练集样本总数量,mk为输出为第k类别的训练集样本数。

调用方法与高斯分布一样,这里就不单独说明了

在文本文类中,多项式的先验概率和条件概率如下:

设某文档d=(t1,t2,…,tk),tk是该文档中出现过的单词,允许重复,则 先验概率P©= 类c下单词总数/整个训练样本的单词总数
类条件概率P(tk|c)=(类c下单词tk在各个文档中出现过的次数之和+1)/(类c下单词总数+|V|)

V是训练样本的单词表(即抽取单词,单词出现多次,只算一个),|V|则表示训练样本包含多少种单词。 P(tk|c)可以看作是单词tk在证明d属于类c上提供了多大的证据,而P©则可以认为是类别c在整体上占多大比例(有多大可能性)。**

三、伯努利模型

伯努利模型对应的是伯努利分布,是一种只有“是"或"否"两种结果的随机变量分布,比如抛硬币的正或反就是非常典型的伯努利分布。

在伯努利模型中,所有特征的取值都会变成0或1,如果特征本身并不是0或1,则会自动设定某个阈值,将低于阈值地设为0,高于阈值地设为1,从而将特征0-1化。然后在所有训练样本中计算0-1的概率,作为特征的条件概率

Sklearn库中对应于 BernoulliNB(),有4个参数,前3个与多项式一样,唯一增加的一个参数是binarize,可以是数值或者不输入。如果不输入,则BernoulliNB认为每个数据特征都已经是二元的。否则的话,小于binarize的会归为一类,大于binarize的会归为另外一类

调用方法与高斯分布一样,这里就不单独说明了

伯努利模型与多项式模型一样,常用于文本分类,其先验概率和条件概率设定为:

P©= 类c下文件总数/整个训练样本的文件总数
P(tk|c)=(类c下包含单词tk的文件数+1)/(类c下单词总数+2)

你可能感兴趣的:(贝叶斯)