当前位置:文档之家› 数据仓库与及数据挖掘文本分类实验报告

数据仓库与及数据挖掘文本分类实验报告

2015-2016学年第1学期实验报告课程名称:数据仓库与及数据挖掘实验名称:文本的分类实验完成人:姓名:学号:日期: 2015年 12月实验一:文本的分类1.实验目的1)掌握数据预处理的方法,对训练集数据进行预处理;2)掌握文本建模的方法,对语料库的文档进行建模;3)掌握分类算法的原理,基于有监督的机器学习方法,训练文本分类器;4)利用学习的文本分类器,对未知文本进行分类判别;5)掌握评价分类器性能的评估方法2.实验分工独立完成3.实验环境基于Windows平台,使用eclipse开发。

4.主要设计思想4.1实验工具介绍Eclipse:一个开放源代码的/基于Java的可扩展开发平台。

就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

Eclipse最早是由IBM开发的,后来IBM将Eclipse作为一个开放源代码的项目发布。

现在Eclipse 在协会的管理与指导下开发。

4.2特征提取与表达方法的设计在此次实验中,我考虑了CHI特征提取的方法来建立数据字典。

详细步骤见5.3描述。

根据CHI特征提取,最终建立成数据字典,数据字典记录在目录E:\DataMiningSample\docVector下的allDicWordCountMap.txt 文档中。

最终的特征向量表达方式为:文档类别标识_单词词频。

如:alt.atheism_abstact 1.0。

其中alt.atheism为此文本所属的类别,abstact为对应的单词,1.0为该单词的词频数。

4.3分类算法的选择本次实验使用的是朴素贝叶斯分类算法,朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。

朴素贝叶斯分类器基于一个简单的假定:给定目标值时属性之间相互条件独立。

即:Document)P(DocumentP(Category||*nt)Category))/P(DocumeP(Category朴素贝叶斯模型:)...2,1|(max arg Vmap an a a V P j =j V 属于V 集合,其中Vmap 是给定一个example 得到的最可能的目标值,a1…an 是这个example 里面的属性。

这里面,Vmap 目标值就是后面计算得出的概率最大的一个,所以用max 来表示。

贝叶斯公式应用到)...2,1|(an a a V P j 中可得到)...2,1(/P )(P )|...2,1(max arg Vmap an a a V V an a a P j j =,又因为朴素贝叶斯分类器默认a1…an 他们互相独立,所以)...2,1(P an a a 对于结果没有用处。

因为所有的概率都要出同一个东西之后再比较大小,对最后结果没有影响。

可得到)(P )|...2,1(max arg Vmap j j V V an a a P =。

尽管是带着这些朴素思想和过于简单化的假设,但朴素贝叶斯分类器在很多复杂的现实情形中仍能够取得相当好的效果。

2004年,一篇分析贝叶斯分类器问题的文章揭示了朴素贝叶斯分类器取得看上去不可思议的分类效果的若干理论上的原因。

尽管如此,2006年有一篇文章详细比较了各种分类方法,发现更新的方法(如boosted trees 和随机森林)的性能超过了贝叶斯分类器。

朴素贝叶斯分类器的一个优势在于只需要根据少量的训练数据估计出必要的参数(变量的均值和方差)。

由于变量独立假设,只需要估计各个变量的方法,而不需要确定整个协方差矩阵。

4.4 性能评估方法本次实验我使用了准确率(P),召回率(R)和F1-Score 来评价分类结果。

下面通过表4.1具体解释一下这三种性能评估方法的计算公式。

表4.1 预测结果和实际情况0-1状态图P = True positive/(True positive + False positive) R = True positive/(True positive + False negative) F1-Score = (2 * P * R)/(P + R)在此实验中,我通过准确率、召回率和F1-Score这三个性能评估方法对最后的结果进行了详细的分析。

关于结果分析的详细描述见5.6。

5.实验过程5.1文本分类语料库的采集本实验的语料库是下载网上现成的英文文本语料库的,该语料库的类别有20类,分别为:alt.atheism,comp.graphics,comp.os.ms-windows.misc,comp.sys.ibm.pc.hardware,comp.sys.mac.hardware,comp.windows.x,misc.forsale,rec.autos,rec.motorcycles,rec.sport.baseball,rec.sport.hockey,sci.crypt,sci.electronics,sci.med,sci.space,soc.religion.christian,talk.politics.guns,talk.politics.mideast,talk.politics.misc,talk.religion.misc,其中每个分类有九千多文档,整个语料库有1万8千多文件。

现在需要将这1万8千多文件分配成训练集和测试集,为了排除人为因素的干扰,和便于操作的效果,我编写了一个TextClassificationofRandom类来实现将语料库中20个分类都随机均分成训练集和测试集,这样我们就形成了训练集和测试集的数据。

在后期实验过程中,通过多次随机生成训练集和测试集来进行实验,获得更详细精确的数据。

详细步骤和结果见后面分析。

5.2数据预处理(1)对所有英文文件进行英文词法分析,去除数字、连字符、标点符号、特殊字符,所有大写字母转换成小写字母,实现方法是通过正则表达式:String res[] = line.split("[^a-zA-Z]");(2)接着去停用词,过滤对分类无价值的词。

结果保存在源文件对应文件.out 里面。

(3)第三步是找词根,将词根还原,并分别将每一类的所有文件的单词进行汇总,同时记录每个单词的词频,最终得到源文件对应文件.outstemed 里面。

5.3 特征提取和表达首先我先解释一下CHI 特征提取公式的意义:CHI 特征提取:))()()(()(),t (22D C D B B A C A BC AD N c ++++-=χ 在此公式中,变量的含义如下所示:N: 所有文档的数目A :在该分类下,包含此单词的文档数量B: 不在该分类下,包含此单词的文档数量C: 在该分类下,不包含此单词的文档数量D: 不在该分类下,不包含此单词的文档数量由于最后,只需要根据CHI 的卡方值进行排序,为了简化运算,对公式做了简单的简化处理: 简化后的计算方法为:))(()(2D C B A BC AD ++-,因为在排序的步骤中,N ,(A+C ),(B+D)都不会对最后的排序造成影响,所以这样的简化处理是合理的。

计算每个单词的CHI值,降序排序后,分别取每一类的排序前2000个单词,经过汇总,去重,得到最终的数据字典,一共是32060个单词。

根据数据字典,将每篇训练集文件和测试集文件转换成特征向量。

结果保存在源文件对应文件. outstemedspecial 里面。

5.4训练过程在本次实验中,我做了5组实验,每组实验又分为两个相对应的实验。

因为我借鉴了交叉检验的思想,一开始我将整个数据集随机分成训练集和测试集两份,相当于2折交叉检验,再颠倒过来将训练集作为测试集,测试集作为训练集。

这样整个过程算是一组实验,然后再将整个数据集随机分成训练集和测试集,重复上面步骤,最终进行了5组10次实验,利用这10次的结果的均值来对算法精度作估计。

以求达到更精确的评估。

这里我就简单介绍一次实验的训练过程:(1)首先,我为了避免对文件的直接操作,可以将训练集文本的路径进行汇总,汇总的方法是通过命令提示符,转到源数据20类文件夹的目录文件下,输入dir /s/b/l *>aaa.lst,回车,这样,源数据20类文件夹下面出现一个aaa.lst文件,用写字板打开文件,将前面几行非源数据文件绝对路径的数据删掉。

最后得到如图5.1的aaa.lst文件。

图5.1 aaa.lst部分内容示意图(2)然后,通过java的文件操作FileReader fileReader = new FileReader("E:/DataMiningSample/orginSample/aaa.lst ");以及后面等一系列操作,不具体描述,在Eclipse中运行TextClassificationofRandom类后,在E:\DataMiningSample\docVector目录下,生成两个文件,一个是记录训练数据绝对路径的文件,一个是记录测试数据绝对路径的文件。

(3)将记录训练数据绝对路径的文件的绝对路径,作为TrainMain类的参数,运行来训练样本的特征,首先计算每个类别出现的特征词数,将结果保存在NBTrain工程下的cateWordsNum.txt文件中,保存方式为:类别+空格+次数。

再计算某单词在某类别中出现的次数,将结果保存在NBTrain工程下的cateWordsProb.txt文件中,保存方式为:类别_单词+空格+词数。

最后,计算所有类别的总次数,将结果保存在NBTrain工程下的totalWordsNum.txt文件中。

这样我们就得到最后的训练模型。

5.5测试过程通过上述步骤,我们得到四个文件,即记录测试数据绝对路径的文件,cateWordsNum.txt,cateWordsProb.txt,totalWordsNum.txt,我们将这四个文件的绝对路径作为TestMain类的参数,运行,通过朴素贝叶斯的算法,得到每个文件属于每个类的后验概率,取其中最大值,作为文件最终被分到的类别,并将数据以文件绝对路径+空格+类别的形式输出到NBTest工程下的classifyResultNew11.txt文件中,方便后期的实验数据统计。

5.6实验结果和性能评估最后实验结果用混淆矩阵来记录,由于我一共做了十次实验,这里就不一一列举,我拿第一次的实验结果来展示一下(后面数据均展示第一次实验结果),完整的实验结果记录在E:\DataMiningSample\docVector\五组实验数据目录下的分类结果.xlsx文件下。

第一次实验结果的混淆矩阵如图5.2所示。

图5.2 朴素贝叶斯分类结果-混淆矩阵表示上面混淆矩阵的每一列代表了预测类别,每一列的总数表示预测为该类别的数据的数目;每一行代表了数据的真实归属类别,每一行的数据总数表示该类别的数据实例的数目,每一列中的数值表示真实数据被预测为该类的数目。

相关主题