Newsgroups最早由Lang于1995收集并在[Lang 1995]中使用。它含有20000篇左右的Usenet文档,几乎平均分配20个不同的新闻组。除了其中4.5%的文档属于两个或两个以上的新闻组以外,其余文档仅属于一个新闻组,因此它通常被作为单标注分类问题来处理。Newsgroups已经成为文本分及聚类中常用的文档集。美国MIT大学Jason Rennie对Newsgroups作了必要的处理,使得每个文档只属于一个新闻组,形成Newsgroups-18828。
STEP ONE:英文词法分析,去除数字、连字符、标点符号、特殊字符,所有大写字母转换成小写,可以用正则表达式
String res[] = line.split("[^a-zA-Z]");
STEP TWO:去停用词,过滤对分类无价值的词
STEP THRE: 词根还原stemming,基于Porter算法
文档预处理类DataPreProcess.java如下
2、特征词的选取
首先统计经过预处理后在所有文档中出现不重复的单词一共有87554个,对这些词进行统计发现:
出现次数大于等于1次的词有87554个
出现次数大于等于3次的词有36456个
出现次数大于等于4次的词有30095个
特征词的选取策略:
策略一:保留所有词作为特征词 共计87554个
策略二:选取出现次数大于等于4次的词作为特征词共计30095个
特征词的选取策略:采用策略一,后面将对两种特征词选取策略的计算时间和平均准确率做对比
测试集与训练集的创建类CreateTrainAndTestSample.java如下
3、贝叶斯算法描述及实现
根据朴素贝叶斯公式,每个测试样例属于某个类别的概率 = 所有测试样例包含特征词类条件概率P(tk|c)之积 * 先验概率P(c)
在具体计算类条件概率和先验概率时,朴素贝叶斯分类器有两种模型
(1) 多项式模型( multinomial model ) –以单词为粒度
类条件概率P(tk|c)=(类c下单词tk在各个文档中出现过的次数之和+1)/(类c下单词总数+训练样本中不重复特征词总数)
先验概率P(c)=类c下的单词总数/整个训练样本的单词总数
伯努利模型(Bernoulli model) –以文件为粒度
(2) 类条件概率P(tk|c)=(类c下包含单词tk的文件数+1)/(类c下单词总数+2)
先验概率P(c)=类c下文件总数/整个训练样本的文件总数
本分类器选用多项式模型计算,根据《Introduction to Information Retrieval 》,多项式模型计算准确率更高
贝叶斯算法的实现有以下注意点:
(1) 计算概率用到了BigDecimal类实现任意精度计算
(2) 用交叉验证法做十次分类实验,对准确率取平均值
(3) 根据正确类目文件和分类结果文计算混淆矩阵并且输出
(4) Map<String,Double> cateWordsProb key为“类目_单词”, value为该类目下该单词的出现次数,避免重复计算
贝叶斯算法实现类如下 NaiveBayesianClassifier.java
4 朴素贝叶斯算法对newsgroup文档集做分类的结果
为方便计算混淆矩阵,将类目编号如下
0 alt.atheism
1 comp.graphics
2 comp.os.ms-windows.misc
3comp.sys.ibm.pc.hdwar
4comp.sys.mac.hardwar
5 comp.windows.x
6 misc.forsale
7 rec.autos
8 rec.motorcycles
9 rec.sport.baseball
10 rec.sport.hockey
11 sci.crypt
12 sci.electronics
13 sci.med
14 sci.space
15 soc.religion.christian
16 talk.politics.guns
17 talk.politics.mideast
18 talk.politics.misc
19 talk.religion.misc
贝叶斯算法分类结果-混淆矩阵表示,以交叉验证的第6次实验结果为例,分类准确率达到80.47%
程序运行硬件环境:Intel Core 2 Duo CPU T5750 2GHZ, 2G内存,实验结果如下
取所有词共87554个作为特征词:10次交叉验证实验平均准确率78.19%,用时23min,准确率范围75.65%-80.47%,第6次实验准确率超过80%
取出现次数大于等于4次的词共计30095个作为特征词: 10次交叉验证实验平均准确率77.91%,用时22min,准确率范围75.51%-80.26%,第6次实验准确率超过80%
结论:朴素贝叶斯算法不必去除出现次数很低的词,因为出现次数很低的词的IDF比较 大,去除后分类准确率下降,而计算时间并没有显著减少
5 贝叶斯算法的改进
为了进一步提高贝叶斯算法的分类准确率,可以考虑
(1) 优化特征词的选取策略
(2)改进多项式模型的类条件概率的计算公式,改进为类条件概率P(tk|c)=(类c下单词tk在各个文档中出现过的次数之和+0.001)/(类c下单词总数+训练样本中不重复特征词总数),分子当tk没有出现时,只加0.001,这样更加精确的描述的词的统计分布规律,做此改进后的混淆矩阵如下
可以看到第6次分组实验的准确率提高到84.79%,第7词分组实验的准确率达到85.24%,平均准确率由77.91%提高到了82.23%,优化效果还是很明显的
相关推荐
通过贝叶斯算法和KNN算法,可以有效地对newsgroup18828文档集进行分类,从而实现信息的有效组织和检索。这些算法在互联网环境中尤其重要,因为它们可以帮助处理海量的非结构化数据,如电子邮件、社交媒体帖子和新闻...
数据挖掘是一种从大量数据中提取有用信息的过程,而贝叶斯算法和KNN算法是两种常用的数据挖掘技术,尤其在文本分类领域。这两种算法在处理非结构化数据,如文档分类时,有着显著的效果。 贝叶斯算法是基于概率论的...
基于贝叶斯及KNN算法的newsgroup文本分类器,eclipse工程 程序运行方法:用eclipse打开工程,并将newsgroup文档集解压到 F:\DataMiningSample\orginSample目录下,同时在F:\DataMiningSample\ 下建好如附件“F盘...
基于贝叶斯及KNN算法的newsgroup文本分类器,eclipse工程,免积分下载版 程序运行方法:用eclipse打开工程,并将newsgroup文档集解压到 F:\DataMiningSample\orginSample目录下,同时在F:\DataMiningSample\ 下建...
在Java中实现基于贝叶斯算法和KNN算法的文本分类器,主要涉及以下知识点: 1. **文本预处理**:文本预处理是文本分类的第一步,也是至关重要的一步。预处理的目的是为了将原始文本转换成可供算法处理的格式,主要...
课程作业-基于KNN算法实现红酒分类实验源码+详细注释+数据集.zip课程作业-基于KNN算法实现红酒分类实验源码+详细注释+数据集.zip课程作业-基于KNN算法实现红酒分类实验源码+详细注释+数据集.zip课程作业-基于KNN算法...
K-近邻算法,又称为 KNN 算法,是数据挖掘技术中原理最简单的算法。 KNN 的工作原理:给定一个已知类别标签的数据训练集,输入没有标签的新数据后,在训练数据集中找到与新数据最临近的 K 个实例。如果这 K 个实例的...
本资源包主要关注两种常见的分类算法:贝叶斯算法和KNN(K-近邻)分类器。这两种方法在实际应用中都有广泛的应用,特别是在预测、推荐系统、垃圾邮件过滤等领域。 **1. 贝叶斯算法** 贝叶斯算法是基于概率论的统计...
1、资源内容:《机器学习实战》- 约会网站数据的KNN分析-手写数字KNN分析-PLA算法决策树 朴素-贝叶斯-逻辑回归+源代码+文档说明 2、代码特点:内含运行结果,不会运行可私信,参数化编程、参数可方便更改、代码编程...
资源包括代码实现和课程报告--Bayes和KNN分类器实现鸢尾花数据集分类 源码实现包括手撕贝叶斯和KNN以及使用工具包实现 课程报告主要包括以下部分: 一、 问题描述 二、 数据预处理 (1)划分数据集 (2)数据可视化 ...
_KNN算法实现鸢尾花数据集分类_C语言实现_IrisClassification-KNNAlgorithm.zip _KNN算法实现鸢尾花数据集分类_C语言实现_IrisClassification-KNNAlgorithm.zip _KNN算法实现鸢尾花数据集分类_C语言实现_...
课程大作业-基于K-means聚类算法和KNN决策判别器的国家经济实力评价matlab源码+数据+报告.zip 第二章 基于K-means的分类统计 5 2.1 K-means介绍 5 2.2 K-means聚类在分类国家经济实力中的应用 7 第三章 基于KNN的...
在提供的压缩包文件中,"KNN算法及Java实现.pdf"很可能是包含KNN算法详细介绍以及如何在Java中实现它的文档。这份文档可能涵盖了以下几个方面: 1. **KNN算法原理**:解释了KNN的基本概念,包括K值的选择、距离度量...
它们在大型图像数据集上的表现往往优于传统算法,能够实现端到端的学习,从原始像素直接预测类别。 【KNN图像分类】 在KNN图像分类中,首先需要对图像进行预处理,如尺寸归一化、色彩空间转换等,然后提取特征,如...
【标题】"java-knn-2.rar_Knn-java_knn" 涉及的主要知识点是K-近邻算法(K-Nearest Neighbors, KNN)在Java中的实现。KNN是一种非参数监督学习方法,常用于分类和回归任务。在机器学习领域,它是一种基础且直观的...
本资源包提供了一次全面的数据挖掘实践,重点涵盖了Python编程语言中的四种经典机器学习算法:K-最近邻(KNN)、朴素贝叶斯(Naive Bayes)、支持向量机(SVM)以及决策树。下面我们将详细讨论这些算法及其在图片...
为了简化系统模型训练方法,提高性别识别系统的整体效率,提出了一种基于改进Citation-KNN算法的说话人性别识别方法。该方法将连续语音切分,训练每段语音的高斯混合模型(Gaussian Mixture Model,GMM)作为多示例...
Java实现k近邻(kNN)算法是机器学习领域中一种基础且重要的算法,主要用于分类和回归问题。kNN算法基于实例的学习,它不预先建立任何模型,而是将新数据分类或预测为与其最近的k个训练样本中最常见的类别。在这个讨论...