北京邮电大学学期实验报告.docx
《北京邮电大学学期实验报告.docx》由会员分享,可在线阅读,更多相关《北京邮电大学学期实验报告.docx(18页珍藏版)》请在冰豆网上搜索。
北京邮电大学学期实验报告
北京邮电大学
2013-2014学年第1学期实验报告
课程名称:
数据仓库与数据挖掘
实验名称:
SVM文本分类
实验完成人:
姓名:
学号:
姓名:
学号:
姓名:
学号:
日期:
2013年11月
实验一:
SVM文本分类
1.实验目的
?
熟悉爬虫的使用,可以利用网络爬虫抓取所需的网络语料
?
熟悉中文分词软件,可以熟练使用接口完成分词任务
?
熟悉文本分类必要的预处理步骤,并运用到实验实践中
?
熟悉特征提取方法,包括
CH-square和LDA特征提取
?
了解SVM机器学习方法,
可以运用开源工具完成文本分类过程
2.实验分工
XXX:
(1)运用爬虫对语料库新闻的收集
(2)对数据的预处理工作
(3)后期的不同对比试验的测试
XXX:
(1)特征的提取
(2)训练集和测试集的生成
(3)后期的不同对比试验的测试
3.实验环境
中文分词与LDA特征提取运行环境:
(1)Javaversion1.7
(2)开发环境:
eclipse
Python代码运行环境:
(1)python3.2
4.主要设计思想
4.1实验工具介绍
WebCrawler:
由实验室集体开发的网络爬虫,不对外公开。
可以方便的通过正则表达式的配置,轻松的完成对网络数据的提取,并且可以根据需求完成过滤老新闻、不合适的网址格式等功能。
最终的爬取结果文件已经经过程序处理,可以直接得到最需要得到的内容。
例如:
在此实验中,最终的爬取结果即为已经从网站中提取出的新闻标题和正文。
ICTCLAS全称为汉语词法分析系统。
具有简易的图形演示界面,和不同语言的API接口,开发者可以根据
自己的需求选择不同的接口。
主要功能包括中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典;在今年的12月中下旬会发布ICTCLAS2014版本。
Libsvm:
是由台湾大学林智仁副教授等开发的一个简单、易于使用和快速有效的SVM模式识别与回归的软
件包。
除了主体训练,测试的程序,还提供了一些使用的工具,例如子集的选择,参数的选择与归一化的操作等实用的方法。
JGibbLDA:
使用JAVA实现了LatentDirichletAllocation(LDA),使用了Gibbs采样来进行参数估计。
4.2特征提取与表达方法的设计
在此次实验中,我们采用了两种特征提取的方法。
针对不同的方法提取的特征分别作了文本分类实验。
所有的特征提取与特征表达的详细步骤会在5.3种进行描述。
CHI特征提取:
根据上面的公式,最终建立成了数据字典。
经过CHI特征提取建立成数据字典,数据字典如图所示(已经经过了按照字母排序处理):
在每个词的前面是数据字典中,每个词对应的id。
最终的特征矢量表达方法为:
Class_idwordl_id:
tf-idf
第一列class_id为此文本所属的新闻类别,word」d为数据字典中每个词对应的word」d,tf-idf为每
篇文档中,对应的tf-idf值。
LDA特征提取:
LDA是主题模型的一种。
假设一篇文章可以由不同的主题组成,把每篇文章中的主题分布概率来当作这篇文章的特征,从而形成了特征矢量。
主题的数量可以由人工根据情况指定或者通过其他方法科学的得到合理也就是概率最大的主题数量,再对其进行人工指定。
经过LDA主题模型分析之后,在通过简单的处理,变换成SVM可以接受的输入格式,会得到如下的
特征矢量:
图中的第一列为文本的所属类别。
后面的为topic_id:
probability。
Topic_id为相应的主题id,probability
为这篇文档此主题的分布情况。
两种特征提取的方法,都将会在5.3中进行详细描述。
4.3分类算法的选择
我们使用的SVM(SupportVectorMachine)分类算法,是最大margin分类算法中的一种。
SVM是一
种可训练的机器学习方法,在小样本中可以得到优秀的训练模型。
如图中所示,SVM分类算法可以根据最边界的样本点,也就是支持矢量,达到二分类的目的。
当数据的样本线性不可分时,会通过核函数的映射,把样本转换到线性可分的矢量空间。
所以核函数的选择也会影响最终的效果。
如果遇到了多分类的问题,如下图所示,可以通过多个SVM训练模型完成多分类的任务。
现在的SVM
工具包都提供了自动的多分类接口。
图2
此外,SVM与logisticregression非常相似。
Logisticregression虽然其名字当中是regression也就是回
归,但是实际上此算法是一个分类算法。
为了达到性能和效率兼备,对不同情况运用不同算法的场景进行了描述:
n为特征的数量,m为训练样本的数量
(1)如果n相对m大很多,可以使用logisticregression或者使用SVM,核函数选择线性核函数
(2)如果n很小,m的大小适中,使用SVM,核函数选择Gaussian函数
(3)如果n很小,m很大,需要添加更多的特征,然后使用logisticregression或者使用SVM,不
使用核函数。
神经网络的算法的效果会优于上面的算法,但是训练的时间非常长,这也是为什么很多人选择SVM
的原因之一。
4.4性能评估方法
最终性能的评价使用了准确率(P),回召率(R)和F1-Score来评价分类效果。
为了解释每种评价标
准的计算方法,先看'如下表格:
实际情况
1代表真实情况此类,0代表不属于
预测结果
1
0
1代表预测属于此类
1
Truepositive
Falsepositive
0代表预测不属于此
0
Falsenegative
Truenegative
类
表1
P=Truepositive/(Truepositive+Falsepositive)
R=Truepositive/(Truepositive+Falsenegative)
F1-Score=(2*P*R)/(P+R)
在此实验中,我们分析了每种特征提取方法最终在每类与总体的准确率、召回率和F1-Score的结果。
关于结果分析的详细描述见5.6。
5.实验过程
基于CHI特征提取的实验流程图:
基于LDA特征提取的实验流程图:
5.1文本分类语料库的采集
通过网络爬虫在爬取新闻语料。
爬取的类别有:
Sport
运动
Finical
经济
Edu
教育
Ent
娱乐
Baby
婴儿
Tech
科技
Games
游戏
Comic
动漫
Auto
汽车
house
房产
在语料库的收集中遇到的主要问题为,有的分类的网页会得到404的爬取结果,原因在于访问的对方
服务器的文件夹年份过于早,网页已经被删除,也就是过期网页。
经过对这些网页爬取结果的分析,大部
分此类网页的爬取结果都为1KB(在windows操作系统下,最小的文件只有1KB,没有更小的文件),为了
提高最终分类的效果,对所有爬取的新闻文件小于1KB的都做了删除处理。
另外,也对比较大的文件做了处理。
经过对爬取的文件的分析,部分新闻文件都是代码没有新闻内容,
对于这样的文件大部分在10、50KB以上,一篇新闻的内容大于150KB的可能性非常小,所以,对于此种异
常文件,也做了删除操作。
经过以上处理,对新闻文件的分配如下:
(1)训练集:
一共10类,每类的训练集为5000篇新闻。
总共50,000篇训练集。
(2)测试集:
运动
10223
经济
6906
教育
9416
娱乐
34937
婴儿
14948
科技
12156
游戏
23945
动漫
12306
汽车
10305
房产
4373
总计
139,515篇
在后期的实验结果中,我们也对设计了不同的训练集和测试集的比例进行了实验,详细结果分析见5.6。
5.2数据预处理
(1)对所有新闻文件使用JAVA接口进行分词。
效果如图:
(2)对每一类新闻的训练集进行提取名词、去停用词的处理,并且,为了以后方便计算每个词的tf,同
时记录每个单词在文档中的tf。
例如:
汽车类(automatic)的其中一篇新闻,经过处理,转换成如下
的文件内容,为了描述方便称此类文件为news_word_frequenee文件:
(3)经过对每一类新闻训练集进行如上处理,分别将每一类的所有news_word_frequenee文件的单词进
行汇总,同时记录每个词的词频,最终得到如下文件:
图中一共有10个文件,代表了10类新闻中的出现的所有单词(已经经过了取名词、去停用词的处
理,并且已经根据词频进行了降序排序)
例如,auto.words文件如下:
第一列为单词,第二列为此单词出现的频次。
在我们的实验中,去除了频次低于5次的单词。
处理过程如图所示:
5.3特征提取和表达
在本实验中使用了CHI特征提取与LDA特征提取两种方法。
下面分别对其提取过程进行描述。
CHI特征提取:
在此公式中,变量的含义如下所示:
N:
所有文档的数目
A:
在该分类下,包含此单词的文档数量
B:
不在该分类下,包含此单词的文档数量
C:
在该分类下,不包含此单词的文档数量
D:
不在该分类下,不包含此单词的文档数量
由于最后,只需要根据
CHI的卡方值进行排序,为了简化运算,对公式做了简单的简化处理:
简化后的计算方法为:
2
(?
?
?
?
・?
?
?
?
(?
?
+?
?
)(?
?
+?
?
),因为在排序的步骤中,N,(A+C),(B+D)不会对最后的排序造成影
响,所以做了简化处理。
(1)因为训练集的数量一共为50000篇,计算CHI值的时间比较长,所以,先分别计算了每一类下每个
单词的A,B,C,D值,并输出到文件。
如图所示:
图中的每一个*.abcd文件,代表着每一类新闻的每一个单词的A,B,C,D值的信息。
例如,下图所示:
auto.abcd文件
第一列为汽车类(automatic)中的单词,往后以此为此单词的A,B,C,D值。
(2)在得到上述文件之后,便可以根据简化后的公式,计算每个单词的
CHI值,降序排序后,最终
得到如下文件:
比如,在auto.chi文件中,如下图所示:
经过降序排序以后,发现排列靠前的单词几乎全都与汽车相关。
(4)分别取每一类的排序前1000个单词,经过汇总,去重,得到最终的数据字典,一共是7544个单词,同时对这些词进行唯一的id标识。
得到chi.features文件。
如图所示:
第一列为单词的id,第二列为数据字典中的单词。
(5)根据数据字典,将每篇训练集新闻文档和测试集新闻文档转换成特征矢量
如图中所示:
第一列为文本类型id,其他列分别为word_id:
tf-idf
LDA特征提取:
LDA的特征提取使用了JGibbLDA开源工具。
(1)根据要求,分别将训练集和测试集生成对应的格式要求。
输入格式如
下:
[M]
[documentl]
[document2]
[documentM]
[documenti]=[wordil][wordi2]...[wordiNi]
[M]为总文件的个数
得到的文件如下所示:
50,000代表着训练集的数量。
每一行代表一片文档,其中的单词代表每篇文档中出现的名词
(已经经过取名词、去停用词等预处理)。
(2)首先对训练集进行迭代,最终得到5个输出文件:
.others
.phi
.theta
.tassign
.twords
其中.twords包括了每个主题当中,最可能的出现的单词。
如图所示:
经过人工判断就可以很明显的看出,LDA的主题分类效果是很好的。
另一个重要的文件是.theta文件。
此文件包含了主题-文档的分布情况,也就是
p(topict|documentm)。
如图中所示:
每一行代表一个文档,每一列代表一个主题。
(3)基于上面对训练集经过处理得到的5个文件,对测试集文件进行迭代,得到对应的主题-文档分布文件。
(4)由于此程序的输出格式并不是严格的按照libsvm的输入格式,需要编
写代码转换成相应的训练文件格式。
转换完成后,如下图所示:
5.4训练过程
在本次实验中,我们做了多组实验。
在这里仅列出训练过程的步骤,详细的结果分析见5.6.
(1)使用checkdata.py工具对训练集和测试集进行检测,是否有格式不合法的地方。
(2)通过数据格式检测之后,通过svm-scale命令对训练集和测试集进行归一化操作,下限为0,上限为1
(3)使用grid.py工具,对训练集进行调参,得到最优的c,g的值。
在调参的过程中,会绘制调参等高线图,如图所示:
此图为调参中的动态等高线图,其中从右上角的位置可以看出,绿色线代表目前最高水平,当前的最好的参数c=32,g=0.03125但是,在
程序调参完成以前,这只是当前局部最优参数,并非全局最优参数。
(4)在得到最终的最优参数之后,使用svm-train命令训练,得到model
5.5测试过程
(1)在上一节中,得到了最终的训练模型,打开模型文件可以看到:
]十丄£十0十7十3十tfT
13vin_typec_sve
_kernel_typerbf
3gmm岂0.S
4tltclassIQ
total_sv22021.
■'rhot>70443714044陀呢石0,12C5430.00265564-0.207SB3-0.0601327-0,0
"label12345678S10
ni_3V1692177922SS2217273227932216194117642€02
9SV~
nr_class:
为新闻分类的个数
nr_sv:
为每类的支持矢量的个数
(2)使用svm-predict命令,加载model文件,进行测试,并且指定输出文件
(3)完成测试之后,控制台只给出了精确率的结果。
并不符合我们实验的
结果分析的需求。
根据第
(2)步的输出文件,可以计算每类的预测和平均的预测精确率、召回率和F1-Sco©
5.6实验结果和性能评估
在本节中,详细的描述了不同实验设计的结果和分析。
(1)得到特征矢量文件之后(未经过归一化处理),直接使用libsvm的默认参数,进行模型训练,得到的模型用于测试。
Precision为:
57.1838%(79780/139515)
可以看出结果比较差。
在打开模型文件之后,可以发现所有的nr_sv值均为5000,这意味着共5000*10个样本点,每类的样本点都作为了自己的支持矢量,这明显是不合理的。
(2)为了解决上述问题,使用svm-scale对训练集和测试集进行归一化处理,下限为0,上限为1。
再次使用libsvm默认参数训练模型,进行测试,可以得到:
Precision为:
75.8535%(105827/139515)
由此可以推断出,进行归一化处理,是必要的一步。
它可以大大的提高分类效果。
(3)为了更好的提高分类效果,使用grid.py工具进行调参。
由于调参是一个漫长的过程,我们分别做了如下对比试验:
①从50,000训练集中随
机挑选出10,000子训练
集调整参数
使用最终全局最优参数训练对应的
集得到model
10,000篇训练
使用最终全局最优参数训练所有的
集得到model
50,000篇训练
②使用50,000训练
集调整参数
使用最终全局最优参数训练所有的
集得到model
50,000篇训练
1组实验用来检测,使用子训练集得到的最终参数是否适用于所有的训练集,还是更适用于子训
练集
2组实验用来与①实验进行对比,检测所有子训练集调参得到的参数与全部训练集调参得到的参
数的最终分类效果
(4)由于目前LDA的topic数量是由人工指定的(已经有文献指出如何科学的
选择LDA的topic数量,但是并没有在本次实验中使用),我们选择了topic
数量分别为50,100,200来做实验。
同样也做了第(3)步的实验对比。
(5)结果如表中所示:
表1:
使用10,000训练集调参,调参结果(大约计算了10个小时左右)
分别用于子训练集生成模型(subsetmodel)和50,000全部训练集(all
model),分类效果如下:
c
g
rate
SubsetModel
(13.9515)
Allmodel
(2.7903)
Topic50
8.0
2.0
89.89%
89.2298%
83.5373%
Topic100
8.0
0.5
90.31%
90.0692%
76.9881%
Topic200
8.0
0.5
89.52%
66.9132%
59.4338%
CHI
4.0
0.25
92.80%
90.8906%
92.3033%
注:
表中的subsetmodel与allmodel中的小数表示测试集与训练集的数量的比值
从表格中可以得到以下信息:
1subsetmodel的测试集大小:
训练集大小的比例为13.9515。
经过此列的数据观察,大部分都在90%左右,
说明在测试集非常大的情况下,仍然能够得到比较好的分类效果。
2通过观察,所有的model,CHI的特征提取方法均大于LDA主题模型。
即使这样,值得我们注意的是,CHI的良好性能是建立在7544维度的基础之上的。
而LDA主题模型建立在50-100维的基础上,甚至在100维度的时候仍然能够达到了90.0692%的良好分类效果。
LDA在维数大大低于CHI维度的情况下,可以达到比
较好的分类效果已经值得引起注意。
3从表中1-3行来看,LDA主题模型的TOPIC数量并不是越少越好,也不是越多越好。
LDA主题模型的TOPIC数量,需要经过科学方法的选择,才会使最终的分类效果达到最优。
可以参考论文:
GriffithsTL,SteyversM.Findingscientifictopics[J].ProceedingsoftheNationalacademyofSciences
oftheUnitedStatesofAmerica,2004,101(Suppl1):
5228-5235.
4更重要的结论是,通过上表可以观察出,通过训练子集得到的最优参数并不一定适用于用来训练全部的训练集。
因此,基于上面的结论④,我们为了试图得到更好的分类效果,我们又做了如下实验。
(1)使用grid.py工具对全部训练集进行调参(大约计算了6-8天左右),使用最终调参结果,训练模
型。
经过测试,得到以下结果:
表2:
Model1为训练子集调参的结果用于整个训练集训练模型得到的测试
结果;Model2为整个训练集都用于调参,最终得到的测试结果
Model1
Model2
TOPIC50
83.5373%
90.1143%
TOPIC100
76.9881%
90.4204%
TIPIC200
59.4338%
88.026%
CHI
92.3033%
91.7486%
从表中我们可以得到:
11-3行表明:
使用子集训练集得到的最优参数并不一定适用于训练所有的训练集。
2虽然第4行中,Model2略低于Model1,仍然得到了不错的分类效果,而且非常接近。
(2)以下,是我们基于所有训练集得到的参数训练的模型的结果图表:
LDATOPIC50:
LDATOPIC100:
LDATOPIC200:
CHI:
从上述表格中可以看出:
最影响分类效果的均是FINANCE类,也就是经济类新闻。
同时,我们也绘制
了分类效果最好的图表。
由此可以看出,不同类新闻对于不同训练出的模型的影响大体是保持一致的。
最后,给出基于所有训练集得到的最优参数得到的模型测试结果和全程实验最优结果的柱状图:
也可以得到结论,TOPIC的数量需要科学选择才能达到最优。
6.实验总结
经过此次试验,学习了文本分类的整体流程,熟悉了机器学习中SVM的原理与使用方法,虽然已经取得了比较好的分类效果,但是还有以下需要改进的地方。
(1)从图表中可以看出,经济类新闻最影响分类效果,有可能与原始语料有
关,可能存在噪音,可以从语料的选择和处理上改进。
(2)LDA模型虽然在整个实验中,并没有达到最高分类效果,但是已经与此次实验中最高分类效果非常逼近,并且LDA模型的维数远远低于CHI的特征选取维数,由此可以看出LDA模型的运用是非常有效的。
可以通过阅读和学习相关文献,对LDA模型的运用更加熟练,科学的选择TOPIC的数量。
并且可以考虑加大训练集来考察对性能的影响。
(3)SVM有不同的核函数,不同的核函数会影响SVM的效率和最终的分类效果,这也是提升性能的一个需要研究的地方。
(4)在特征的提取中,本次实验只关注了对于字典中出现词对分类的影响,
却没有关注没有出现的词的信息的利用。
如果考虑这一方法,经济类新闻对整体分类效果的负面影响应该会大大减少,同时也能大大的增强其
他新闻类别的分类性能。
(5)此次使用了50,000篇训练文档,139,515篇测试文档,但是在大数
据下,数量远远超过此次实验使用的数量的数量级。
为此,在ICML2013
的会议中,Scalable也成为了一个值得注意的焦点。
Scalable可扩展性用
于描述怎样可以在大数据下科学的采样。
可以详细阅读,ICML2013会
议上的文献:
MengX.ScalableSimpleRandomSamplingandStratifiedSampling[J].
来考虑大数据学习。
在此文中提出了如何科学的在大数据中提取样本,和在数据流中提取样本,
同时也提出了分层提取样本的方法,比如在正例和负例集中如何采集样本。
附:
1、降维以前名词(已经取名词、去停用词)的数量:
123598
2、调参所需时间:
调参系统环境:
VMwareUbuntu12.10,内存2G,32位
样本数量
10,000
50,000
LDATOPIC50
LDATOPIC100
5-6天左右
8-10个小时左右
LDATOPIC200
CHI(7544)
10+小时
9-10天
3、