没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
北京邮电大学
2016-2017 学年第 1 学期实验报告
课程名称: 数据仓库与数据挖掘
实验名称: 文本的分类
实验完成人:
姓名: 学号:
日 期: 2016 年 12 月
1
实验一:文本的分类
1. 实验目的
观察网页结构,利用爬虫算法爬取某网站的几类新闻网页内容,通过对其进行预处
理、分词以及特征选择等,建立特征词典,构建每个文章的特征向量。之后利用分类算
法,如朴素贝叶斯、
SVM
等,针对训练集的特征向量以及类标签进行训练,得到分类
模型,并通过计算在测试集上的预测准确率、召回率等对不同分类器的分类效果以及不
同参数影响进行性能评估,且通过
ROC
曲线直观对比分类效果。
2. 实验进度
本实验由一人完成,所以在此列出实验进度完成时间表。
时间
内容
11.8
学习 python 基本语法
11.9-11.11
了解爬虫算法,掌握操作 URL 的 urllib 和网页解析器 BeautifulSoup,观察
新浪几类新闻资讯网页结构的 html 标签,编写代码,抓取 10 类共 2 万多篇
文本的新闻内容,保存到本地。
11.12-11.13
了解常用的几种分词方法,选用 jieba 分词和词性提取包作为本实验的分词
工具,并去除停用词、无关词(自己加入的)等仅仅保留 flag 为名词的词语,
保存到文本中。
11.14
统计每篇文章中的出现词语的词频信息、每个类别中出现词语的词频信息、
每个类别中出现的词各自在多少篇文章中出现的信息,以便之后进行卡方
检验以及 tfidf 计算。
11.15
掌握卡方检验的原理并完成代码实现,得到每个类别中的 CHI 值较大的前
10%的词语作为此类的关键词,保存到文本中。
11.16-11.17
搜索了解学习 python 中进行科学计算和文本分类的库,如 numpy、scipy、
sklearn 等,并通过学习 demo 代码掌握使用的基本方法。
11.17-11.18
针对以上过程保留的所有文章中的所有关键词,作为当前特征词典,利用
sklearn 的 feature_extraction 包计算所有词语 tfidf 值并归一化作为特征向量。
并利用 sklearn 的 feature_extraction 包中 chi2 再次筛选特征词进行降维。
11.19-11.20
自行编写实现朴素贝叶斯算法代码,并了解掌握 sklearn 包中分类器的调用
方式。
11.21-11.23
搜索博客查看前人的分类实现经验,了解性能评估方式,掌握交叉验证、
准确率、召回率等相关概念及代码实现,测试不同分类算法的分类效果。
并得到混淆矩阵。
11.23-11.24
了解 ROC 曲线 python 实现方法,直观对比不同分类器的分类效果。
11.25-11.26
撰写实验报告。
2
3. 实验环境
Win7 (32
位
)
Python 2.7(32
位
)
、
Pycharm
可视平台
4. 主要设计思想
4.1实验工具介绍
文本分类是对输入文章进行预先设定类别判定的问题,涉及到大量文本要素的处
理。因此选择适当的编程语言有助于文本分类实验的进行。
Python
是一种应用广泛的通
用编程语言,在文本分类领域中有其显著特点和优势。
1
、易于快速开发,语言简洁,技巧性小。
2
、内置常用的数据结构和算法,不仅有利于提高程序易读性,且利于文本结构的
储存,便于文本的转换处理。
3
、具有丰富的标准库和第三方库以及数据处理包,许多辅助环节如字符编码、网
页信息抓取等可以借鉴已有框架。
4
、相关研究的丰富积累,
python
在自然语言处理方面有很多优秀的相关模块和博
客文章,有利于相关知识的快速了解与掌握。
4.2特征提取与表达方法的设计
本实验,在设计过程中主要考虑以下几点:
①文本分类属于有监督的学习,需要整理样本,确定样本数目以及记录样本标签。
②针对爬取的新闻样本需要进行分词操作得到文章的词语表示。
③因为分词后每篇文章中包含的词语是很多的,这些词并不都是表征能力强的词,
所以需要根据词性、词长短等过滤掉大部分的无关词。
④如何表征文章呢?在本实验中,我采用的特征提取模型是向量空间模型
(VSM)
,
即将样本转换为向量。为了能实现这种转换,需要进行确定特征词典和得到特征向量的
过程。
⑤虽然可以将所有样本的词都提取出来作为词典,但随着样本数目的增多,词典规
模可能达到万级、千万级甚至亿级,这么大的维度可能会带来维度灾难,因此就要想办
法从大量的特征中选择一些有代表性的特征而又不影响分类的效果,这个环节,我采用
了目前领域内认为比较好的卡方检验方法得到每类中的关键词。
⑥作为特征向量的表示,这里我采用了
TF-IDF
的方法得到每篇文章的特征表达。
4.3分类算法的选择
在本实验中,我采用了朴素贝叶斯和
SVM
两种分类方法进行文本分类,其中,朴
素贝叶斯为自己编写实现,
SVM
为调用的
sklearn.svm.SVC
。
下面,我将从原理及流程方面介绍这两种分类算法。
一、朴素贝叶斯
3
朴素贝叶斯是在独立性假设的前提下实现的,即在给定目标值时,假设特征之间是
相互独立的。
朴素贝叶斯的公式表示为:
arg max ( ) ( | )
j
NB j i j
i
v V
v p v p a v
因为这部分需要独立编写代码实现,所以我详细了解并掌握了朴素贝叶斯的流程,
并总结如下。
对已知的特征矩阵和标签矩阵,我们定义:
[ 1, 2, 3,....., ]x f f f fn
为一个样本特征向量,其中
fi
是每个特征的特征值。
[ 1, 2, 3,......, ]y y y y yn
为每个样本的真实所属类别。
[ 1, 2, 3,......, ]X x x x xn
为样本集,其中每个样本
xi
是
x
的构成形式。
假设这些样本总共分为了 3 类,分别为
1, 2, 3class class class
。
第一步:
通过样本集的类别分布,对每个类别计算先验概率。也就是需要计算出这些样本分
属 3 个类别各自的比例,比如:
class1
( 1)p class
所属 的样本数目
所有样本的总数
这样,分别计算出
( 1), ( 2), ( 3)p class p class p class
。
第二步:
计算每个类别下每个特征属性值的出现概率。比如,当为类别 1 时,特征 1 的值为
1
1f
时的频率
1
( 1 | 1)p f class
为:
1
1
class1 1 1
( 1 | 1)
class1
f
p f class
在属于 的样本中特征 的值为 的样本数目
所属 的样本数目
第三步:
计算每个样本所属每个类别的概率。比如对于第一个样本,根据它每个特征值的情
况,依次从第二步的结果中提取对应值并相乘。得到它分别属于这 3 个类别的概率,即
( 1| 1) ( 1) * ( 1 | 1) * ( 2 | 1) *...* ( | 1)
a b q
p x class p class p f class p f class p fn class
( 1| 2) ( 1) * ( 1 | 2) * ( 2 | 2) *...* ( | 2)
a b q
p x class p class p f class p f class p fn class
( 1| 3) ( 1) * ( 1 | 3) * ( 2 | 3) *...* ( | 3)
a b q
p x class p class p f class p f class p fn class
第四步:
比较样本预测属于这三个类别的概率值,找出最大概率对应的分类作为这个样本最
终的预测分类结果。
二、SVM
SVM 的基本模型为特征空间上的间隔最大的线性或非线性分类器,即支持向量机
的学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解,可以求得全局
最优解。
而且,SVM 是基于结构风险最小化来做的,这样就避免了过学习问题,泛化能力
强,因此从理论上要强于传统的经验风险最小化的统计学习算法。从目前来看,SVM
4
算法在处理文本分类的时候有很大的优势。
但
SVM
也有其缺点,它的运算复杂度太高,特别是在多分类问题上,由于
SVM
是
线性分类器,所以要为每个类别分别去生成一个分类模型。
4.4性能评估方法
要评估分类效果的好坏,对于原始数据我们要将其划分为
train data
和
test data
。
train
data
用于训练,
test data
用于测试正确率
(validation error)
。但是为了避免偶然性的影响,
不能只做出随机一次划分,得到一个
validation error
,就作为衡量这个算法好坏的标准。
必须进行多次随机的划分,分别在其上面计算出各自的
validation error
。这样通过某种
结合方式有效利用这一组
validation
,就可以较好的准确的衡量算法的好坏。所以,在本
实验中用到了交叉验证的方法,可以有效消除一次检验所带来的波动,得出比较合理的
分类正确率。
交叉验证是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下
将原始数据
(dataset)
进行分组,一部分作为训练集
(train set)
,另一部分作为验证集
(validation set)
,首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型
(model)
。
使用交叉验证方法的目的有
3
个:
①从有限的学习数据中获取尽可能多的有效信息;
②从多个方向开始学习样本, 可以有效的避免陷入局部最小值;
③无论是训练样本还是测试样本都得到了尽可能多的学习,可以在一定程度上避免
过拟合问题。
在本实验中,我采用的是常用的
K
折交叉验证。
一、正确率、精确率和召回率
通常,我们利用正确率
(accuracy)
来评价分类算法。正确率确实是一个很好很直观的
评价指标,但是有时候正确率高并不能代表一个算法就好。因为在本实验我们的数据分
布不均衡,如表
5.1
所示,类别为“考研”的文章很多,有
2489
篇,而类别为“中考”
的文章很少,只有
654
篇,完全错分类别“中考”依然可以达到很高的正确率却忽视了
我们关注的东西。所以,在本实验中,我采用正确率、精确率和召回率三者一同来评价
分类效果。
关于正确率、精确率和召回率的概念,这里会涉及到几个模型评价术语,现在假设
我们的分类目标只有两类,则会得到四种情况:
1)True positives(TP):
真实为正类,预测为正类的样本数;
2)False positives(FP):
真实为负类,预测为正类;
3)False negatives(FN):
真实为正类,预测为负类;
4)True negatives(TN):
真实为负类,预测为负类。
由此得到四者的关系如图所示。
剩余41页未读,继续阅读
资源评论
mini猿要成长QAQ
- 粉丝: 751
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功