朴素贝叶斯文档分类实验
来源:互联网 发布:java 乘法 编辑:程序博客网 时间:2024/05/17 07:38
根据朴素贝叶斯(Naive Bayes)算法1,对以下混在一起十个分类的文档集合进行分类。
实验要求
采用分词工具,以及停用词列表提取文本特征后,根据朴素贝叶斯算法对以下混在一起十个分类的文档集合进行分类。
采用10-fold cross validation的实验过程进行分类方法的验证,测试当训练集合分别为100,200,300,500,800个文档的时候,分类结果的准确性,画出学习曲线图(10 Fold Learning Curve)。
实验环境
操作系统:Ubuntu 14.04.3 LTS
开发环境:JDK 1.7
Java库: ansj_seg-2.0.7.jar, nlp-lang-1.0.jar
实验过程
加载所有的文档
对文档分词
提取文本特征
根据朴素贝叶斯算法进行分类
画出学习曲线图
加载所有的文档
给定10个文件夹,每个文件夹内有100个文档,共1000个文档。
对文档分词
使用ansj_seg2对文档进行分词。去掉在数词、标点符号和停用词,得到的若干个词。
提取文本特征
使用向量模型(Vector model)3提取文本特征HashMapVector,把每个文档中单词及其出现的次数保存为一个HashMap。
根据朴素贝叶斯算法进行分类
取每个文档及其对应的分类作为样本,把数据集分为
训练与测试使用朴素贝叶斯算法,具体过程如下:
训练过程:
Let V be the vocabulary of all words in the documents in $D$For each category $c_i \in C$ Let $D_i$ be the subset of documents in $D$ in category $c_i$ $P(c_i) = |D_i| / |D|$ Let $T_i$ be the concatenation of all the documents in $D_i$ Let $n_i$ be the total number of word occurrences in $T_i$ For each word $w_j \in V$ Let $n_{ij}$ be the number of occurrences of $w_j$ in $T_i$ Let $P(w_j | c_i) = (n_{ij} + 1) / (n_i + |V|)$
测试过程:
Given a test document $X$Let n be the number of word occurrences in $X$Return the category: $\text{argmax}_{c_i \in C} P (c_i) \Pi_{i = 1}^n P (a_i | c_i)$ where $a_i$ is the word occurring the $i$th position in $X$
画出学习曲线图
令训练集合分别为100, 200, 300, 500, 800个文档,使用N-Fold对分类结果的准确率进行交互验证,并把所得的准确率画成折线图。
这里为了方便,直接把训练和测试的平均准确率输出到train.data, test.data文件,使用gnuplotp4进行绘图。此外,也可使用gnuplot生成曲线图相应的latex代码。
在命令行中运行
gnuplot train.gnuplotgnuplot test.gnuplot
即可得到train.png和test.png。
参考
- Naive Bayes classifier. 维基百科. 最后修订于2016年5月9日. https://en.wikipedia.org/wiki/Naive_Bayes_classifier ↩
- AnsjSeg 使用手册. http://nlpchina.github.io/ansj_seg/ ↩
- Vector space model. 维基百科. 最后修订于2016年4月5日. https://en.wikipedia.org/wiki/Vector_space_model ↩
- gnuplot homepage. Thomas Williams, Colin Kelley. 最后修订于2016年4月. http://www.gnuplot.info/ ↩
- 朴素贝叶斯文档分类实验
- 朴素贝叶斯文本分类
- 朴素贝叶斯文本分类过程
- 朴素贝叶斯文本分类
- 朴素贝叶斯文本分类
- Mahout朴素贝叶斯文本分类
- 朴素贝叶斯文本分类算法
- 朴素贝叶斯文本分类算法
- 朴素贝叶斯文本分类算法
- 朴素贝叶斯文本分类
- 朴素贝叶斯文本分类应用
- 朴素贝叶斯文本分类
- 手写朴素贝叶斯文本分类
- 贝叶斯文本分类实验
- 朴素贝叶斯文本分类算法java实现
- 朴素贝叶斯文本分类算法java实现(二)
- 朴素贝叶斯文本分类算法源代码
- 朴素贝叶斯文本分类java实现
- 谈谈C里面的指针之二【指针的加减法】
- 使用SQLyog将sqlserver的数据及表结构迁移到mysql中
- php基础知识
- 每日总结 2016年七月28日一个地方的异常会引发其他地方的异常
- Docker 与 PAAS
- 朴素贝叶斯文档分类实验
- BeautifulSoup使用一两则(不定期补充)
- 8.【shell】Tenth line --Accepted code
- 【bzoj2038】 小Z的袜子(hose)
- SQL四种语言:DDL,DML,DCL,TCL
- [leetcode] 292. Nim Game
- python的numpy模块安装问题
- 写一个存储过程,造一点测试数据
- js回调函数小例子