关于朴素贝叶斯的来龙去脉公式推导这里不多谈,分享一下在毕业设计中如何将这一算法实际应用到预处理的过程中。
1.应用环境
需求是将爬虫的数据的content部分在预处理的环节中进行分类打上标签,可以考虑的分类方法有很多种,svm,lda等等,这里使用朴素贝叶斯,因为相对简单容易上手。
2.训练预料
搜狗实验室提供的训练预料,链接如下
3.过程中遇到的困难
一开始操作的时候也觉得只是简单的输入输出,可以很简单的将算法封闭成黑箱子操作。但实际生产过程中遇到了如下的困难
3.1如何将算法与实际数据对应起来?
将待分类的文本进行分词,可以将他看成一个X(a1,a2,a3……an)这样的矢量,其中a为分词后的关键词。将分类放于不同类别文件夹下的文件夹名记为C(y1,y2,y3……yn),y为
类别名,朴素贝叶斯成立的前提是默认a1,a2等之间的独立,所以待分类文本的概率可以记为所有p(a|y)相乘再乘以后验概率p(ci|c)的概率。p(a|y)可以用 ( 包含该词的文本/该类别下的文本数量 )来计算,后验概率可以用 (该类别下的文本 / 总文本数量) 来计算。
这部分遇到的困难主要在于如何将算法和实际问题对应起来。
3.2训练量较大时速度慢
参考网上的代码每次对一个文本进行分类时总要重新扫描一遍训练文本,训练文本少的情况下分类效果不佳,训练文本多的情况下速度慢的夸张。这里做了一点小小的改良,将训练语料进行分词后,统计出每个类别下每个词的数量并形成文件保存在硬盘中,在以后的分类过程中可以直接将文件读取并解析成hash表,今后的分类就可以直接去内存中提取hash表的数据。前面的规则也修改为将待分类文本分词后在hash表中扫描,如果存在对应key就取出该词的次数,不存在置为1。计算概率的公式可改为 (该词出现的次数 / 类别总词数)
最后附上代码,删除了一部分包只留下了bayes部分的包