朴素贝叶斯算法记录

目录

 

前言

训练过程

1、确定有多少类

2、确定样本

3、训练流程

4、生成训练矩阵

分类预测

如何求概率值?

词袋模型

分词框架


前言

通过朴素贝叶斯算法对样本数据进行训练,完成对新输入的分类预测。样本是各种各样的问题及该问题对应的类别。

训练过程

1、确定有多少类

2、确定样本

一个样本包括问题及其对应的分类,通过对样本数据的梳理,确定以下几个数:

① 总样本个数               N

② 每一类样本的个数    n

③ 每一类的占比           n/N

3、训练流程

(1) 对所有样本的问题进行分词-->结果:分词结果以及每一个词出现的次数,记录并更新有多少项,即多少次,即x轴长度

(2) 得到矩阵的x轴词向量

(3) 记录每一类词总量,计算总词数

4、生成训练矩阵

(1) 分词结果中单词

计算公式:(这一类样本数/总样本数) * (该单词在本类中出现的次数/本类所有样本生成的词个数)

P(c1| x) = ( P(x | c1) * P(c1) ) / P(x)

①   P(x)和类别无关,所以如果仅仅是为了区分类别,而不是求具体概率,这里P(x)可以省略不考虑

       P(x)=P(x1)*P(x2)...P(xn),P(x1)=x1这个词出现的次数/所有词的总个数[和分类无关,是整个语料的统计]。

②  P(x|c1)=P(x1,x2...xn|c1)=P(x1|c1)*P(x2|c1)...P(xn|c1)

      P(x1|c1)=x1单词出现的次数/c1类所有单词的个数

     [矩阵中每一个单词对应每一个分类的概率值,分类c1中x1单词出现的概率]

③  P(c1) = c1这一类语料的个数/总语料的个数

(2) l拉普拉斯平滑

1/(该类词总数+所有的词数)

P(x1|c1)=(n1+1)/(n+N)

这里,n1是单词x1在c1类中出现的次数,可能为0

这里,n是c1类中所有单词出现的次数总和

这里,N是所有单词的数目,这是一个固定值,即词向量的长度,总共多少个单词。

分类预测

1、对新输入的记录进行分词,按照矩阵的x轴生成对应的词向量,不存在词为0个

2、拿生成的词向量代入到矩阵中,得出每一类对应的概率值,取最大的,即为预测的分类

      即求P(c|x)的大小 c代表分类,每一类的对应出来的结果,求分子最大的极为结果.

如何求概率值?

1.待预测语料,在分完词之后,分词结果中的词有些可能没有在词向量矩阵中,而且分词结果的词也不一定刚好有所有的词向量那么,在向量矩阵中不存在的词舍弃掉,写入到表记录。词向量中的词在分词结果不存在的词记为0,存在的词记为1。

2.计算概率

为1的,直接取到对应词在该矩阵中的概率值

为0的,根据拉普拉斯平滑,值为  1/该类词总量

词袋模型

在预测中,可以加入词频优化,新输入待预测的记录,在分词之后,记住每一个词的个数,在计算每一类的概率时候,拿词出现的频度*概率 得到结果来比较。

分词框架

分词框架使用IKAnalyzer,设置行业字典,设置停用词字典。

猜你喜欢

转载自blog.csdn.net/liangcha007/article/details/84937013