当前位置:   article > 正文

基于python的贝叶斯分类算法_朴素贝叶斯分类算法的sklearn实现

基于python的贝叶斯分类算法_朴素贝叶斯分类算法的sklearn实现

1、背景

《机器学习实战》当中,用python根据贝叶斯公式实现了基本的分类算法。现在来看看用sklearn,如何实现。还拿之前的例子,对帖子的分类。数据如下:

50507198f2b7

待分类的文本

补充:题目的值左边是几个人的评论,右边是评论属于侮辱类(1)、正常类(0),需要进行文本分类,且再有新的文本过来时能自动划分至0或1。

2、分类

(1)算法的准备

通过查看sklearn的训练模型函数,fit(X, Y),发现只需要准备两个参数。一个是数据的矩阵,另一个是数据的分类数组。首先就是将以上的文本转化成矩阵。

在前一章其实已经讲解过如何将文本转化成矩阵。这里将示意的再补充下。

a.首先选取所有的单词,形成列,也可理解为属性。例如:

50507198f2b7

全列

b.其次将遍历每个文本,填满上述列的值。文本出现过列的次,填一。没有出现过填0。比如第一句就是:my dog has flea problems help please,可表示为:

50507198f2b7

表示

同理所有的文本都可如此表示,所以就形成了一个数字的矩阵。

(2)beyes模型的选择

在完成数据的准备以后,就可以直接调用sklearn的模型和函数完成模型的训练啦。但在beyes模型的选择的时候发现,beyes下有多个模型可选择,所以这个会让人纠结。接下来共同了解下这些模型:

a.高斯模型(GaussianNB)

高斯模型是对于每个属性的值是连续的,且服从高斯分布时可使用:

50507198f2b7

高斯分布

比如人的身高,比如花的高度等等。当然你也可将这些数据离散化,比如按等距划分、等频划分成离散的值,但可能效果都没有直接用高斯模型来计算的好。

用法:class sklearn.naive_bayes.GaussianNB

参数:无

b.多项式模型(MultinominalNB)

如果大部分是多元离散值,则采用多项式模型要好些。多项式模型,通常就是构造参数向量,然后通过极大似然估计来寻求参数的最有值。

50507198f2b7

参数向量化

50507198f2b7

频率的计算

这里只简单的略列一些公式,具体可查询更多资料。从这个计算过程中可得出,这里引入啦一个平滑先验值alpha,这个值在模型训练的时候也会用到。通常alpha>0,可引入不在训练集的特征,尤其当alpha=1,成为拉普拉丝平滑。具体alpha取值对模型的影响可附件的图。

用法:class sklearn.naive_bayes.MultinomialNB(alpha=1.0,fit_prior=True,class_prior=None)

参数:

alpha:浮点数,就是上述说的引入平滑的值;

fit_prior:bool值,如果为Ture,则不用去学习P(y=ck),以均匀分布替代,否则则去学习P(y=ck)(不懂)

class_prior:一个数组。它指定了每个分类的先验概率P(y=c1),P(y=c2)…..,若指定了该参数

则每个分类的先验概率无需学习 (不懂)

c.伯努利模型(BernoulliNB)

如果特征值为二元离散值或是稀疏的多元离散值,则可采用伯努利模型。

50507198f2b7

伯努利模型

公式:class sklearn.naive_bayes.BernoulliNB(alpha=1.0,binarize=0.0,fit_prior=Ture,

class_prior=None)

参数:

binarize:一个浮点数或者None,如果为浮点数则以该数值为界,特征值大于它的取1,小于的为0 。如果为None,假定原始数据已经二值化

其它参数同上。

通过以上的模型对比和分析,由于文本分析转化后是很多二项取值的稀疏矩阵,因此选取伯努利模型效果会更佳。

50507198f2b7

部分算法实现

补充:alpha、binarize值对模型效果的影响

50507198f2b7

alpha值对多项式模型的影响

50507198f2b7

binarize值对伯努利模型的影响

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/869219
推荐阅读
相关标签
  

闽ICP备14008679号