目录
前言
通过朴素贝叶斯算法对样本数据进行训练,完成对新输入的分类预测。样本是各种各样的问题及该问题对应的类别。
训练过程
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,设置行业字典,设置停用词字典。