朴素贝叶斯实现文本分类(1)

【背景】

    实习时,因工作需要,需要实现提取筛选出能够代表某类文档的关键词,最终达到文档去重的效果。在这个过程中,筛选代表性关键词是非常关键的一步,我当时的一种思路:

1、首先按照经典的TF-IDF公式(好几种变形,选取准确率最高的一种)算出各关键词权重,在这之前已经去掉停用词等明显不具备代表性的关键词;

2、提取一定量关键词作为假设的类别关键词,使用朴素贝叶斯分类法对文档进行分类;

3、计算准确率验证,低于临界值的将被排除,进行下批关键词计算

这里主要记录下分类过程,naive bayes模型号称是最简单、最高效的分类算法,但是实践起来还是有很多要注意的地方。

【问题定义】

这是一个分类问题,即将一些样本分到若干个类别c当中。通常,类别用整数表示,对于两个类别,可以用+1和-1来表示,也可以用0和1来表示。而样本的表示方法,通常用向量来表示,如:X = {x(0), x(1), x(2).....}。大写的X表是一个向量,这个向量代表了样本集合中的一个样本。小写的x表示向量X中的一个分量,表征样本的某种属性,例如:大小、光泽、啥啥的。而x(i)的取值,则表示这种属性的具体取值,可以是连续值,用实数表示,也可以是离散值,用整数表示。

 

总的来说,输入是一个R维的空间,输出是一个整数类型的值。其实分类器,可以看作R维空间的超平面,将R为空间分成若干个部分,每个部分就是一个类别,用一个整数值来表示。

【naive bayes模型】

先看一下贝叶斯模型,因为p(X)只和输入样本相关,对所有类别来讲都是相同的,在求最优化问题的时候可以不予以考虑。即:对于新的样本X,直观地说,我们要找到 p(c|X) 概率值最大的c,来作为样本X的类别。这个怎么算呢?就用到贝叶斯公式,如下:p(c|X) = p(c, X) / p(X) = p(X|c) * p(c) /p(X),

argmax p(c|X) = argmax p(X|c) * p(c)

上面公式将条件概率分解了,成为先验概率和条件概率的乘积。先验概率p(c)很好估计,因为c的可能取值不会太多。条件概率p(X|c)就麻烦了,因为X是个向量,R维的。R维空间的点多了去了。假设每个维度可以取值的个数是m,则X所有可能个数是m^R。用最大似然方法根本没法估计——样本还没参数多。btw:最大似然的基本假设是大数定律,即当样本趋向于无穷大的时候,估计的概率才和真是的概率相同。这时候,“朴素”两个字就起作用了。所谓的朴素贝叶斯模型,是在上面模型的基础上做了这样一个独立性假设:输入空间的每一个维度的取值是相互独立的,他与类别之间的条件概率可以分解为各个维度与类别的条件概率的乘积,如下:

p(X|c) = p(x(0), x(1), x(2)...|c) =p(x(0)|c) * p(x(1)|c) * p(x(2)|c) ...... p(x(R)|c)

这样一来,就将联合概率分解为每个维度的子概率的乘积。而对于每个维度的条件概率p(x(i)|c)是比较好估计的,参数空间是m*|C|,其中m是维度取值的个数,|C|是类别个数。如果算上R个维度,参数空间也不过是R*m*|C|,远比m^R这样的指数复杂度小。对于每个维度的条件概率p(x(i)|c)可以用最大似然方法估计概率值。好,这就是“朴素贝叶斯”模型。

 

朴素贝叶斯模型为了算法效率而做了独立性假设,这个假设对于绝大多数的问题都是不成立的。有些研究也尝试着放宽这个假设,即在一定程度上将各个维度之间的联系加入到模型当中,不过实验效果表明,这种扩展模型的性能往往还不如原始的朴素贝叶斯模型。

 

【朴素贝叶斯分类用于文本分类】

1、文本分类的两种模型

所谓文本分类,是指对所给出的文本,给出预定义的一个或多个类别标号,对文本进行准确、高效的分类.它是许多数据管理任务的重要组成部分。新闻类别(财经、体育、教育等)划分、垃圾邮件检测等都属于文本分类。文本分类可以采用Rocchio算法、朴素贝叶斯分类算法、K-近邻算法、决策树算法、神经网络算法和支持向量机算法等,本节就采用朴素贝叶斯完成分本分类任务。

文本分类的基础是切词,切词是一个很重要的研究方向,英文切词相对自然比较容易--几乎是切成一个个单词即可,中文切词比较麻烦(预处理阶段需要特殊的处理),接到任务时切词部分给了接口,直接获得,在这里就不重点描述切词的过程了。本文的重点是采取朴素贝叶斯进行文本的分类,假设文档已经完成了切词。

文本分类中有两种朴素贝叶斯的概率计算模型可以使用,下面以二分类为模型说明两者类先验概率P(c)和各个词的类条件概率P(tk|c)的具体计算方法,P(tk|c)可以看作是单词tk在证明文本d属于类c上提供了多大的证据,而P(c)则可以认为是类别c在整体上占多大比例(有多大可能性)。

朴素贝叶斯算法用于文本分类时,特征词的选取是一个很重要的性能因素。若将所有单词作为特征词无疑会消耗巨量的内存,计算性能也会下降。所以特征词的选取策略要根据实际做一些优化,如训练数据先进行人工筛选、只取出现次数大于N(N>=1)的词等。

(i)多项式模型(multinomial model)即为词频型--根据分类中某词出现的次数计算概率。

可以说多项式模型概率计算是以“词”为基础单位,设某文本d=(t1,t2,…,tk),tk是该文档中出现过的单词,允许重复,则在多项式模型中类先验概率和各个单词类条件概率的计算方法为:

先验概率P(c)= 类c下单词总数/整个训练样本的单词总数

类条件概率P(tk|c) = (类c下单词tk在各个文档中出现过的次数之和+1)/(类c下单词总数+|V|)

V是训练样本的单词表(即抽取单词,单词出现多次,只算一个),|V|则表示训练样本包含多少种单词。

多项式模型中各单词类条件概率计算考虑了词出现的次数,相当于考虑了词的权重,这更符合自然语言的特点。另外,根据斯坦福的《Introduction to Information Retrieval 》课件上所说,多项式模型计算准确率更高。待分类项类别判断时仅根据其中出现的单词进行后验概率计算,即:

P(t1|c)*P(t2|c),...,*P(tk|c)*p(c)    

(ii)贝努利模型(Bernoulli model)即词集型--根据分类中某词是否出现计算概率。贝努利模型不考虑词在文档中出现的次数,只考虑出不出现,因此在这个意义上相当于假设词是等权重的。

先看贝努利模型的定义--对随机实验中某事件是否发生,试验的可能结果只有两个,这种只有两个可能结果的实验称为贝努利试验。贝努利模型中甭管哪一类,每个单词只有出现或者不出现两种,因此可以这么理解二分类的贝叶斯贝努利模型--文本中某些词的出现与否决定了该文本的分类,这实际上包含了两部分:一些词出现了,另外一些词没有出现。因此贝努利模型中各个单词类条件概率的计算是:在文本中出现的单词作为“正方”参与计算,没有在文本中出现但在该类全局单词表中出现的单词作为“反方”参与计算。

贝努利模型概率计算的是以“文本”为基础单位,设某文本d=(t1,t2,…,tk),tk是该文档中出现过的单词,不允许重复,贝努利模型类先验概率和各个单词类条件概率的计算方法为:

P(c) = 类c下文件总数/整个训练样本的文件总数

P(tk|c) = (类c下包含某单词tk的文件数+1)/(类c下文件总数+2)

其中计算P(tk|c)时,分子+1是引入Laplace校准,分母加2是因为词只有出现与否两种情况,估计也是为了数据校准(TBD)。对待分类项进行类别判断计算后验概率时,“正方”的概率就是P(tk|c),“反方”的概率是(1-P(word|c))(word是虽然不在d中,但出现在该类全局单词表上的词。因为Laplace校准的存在,实际上相当于全部的单词都参与计算),即:

P(t1|c)*P(t2|c),...,*P(tk|c)*(1-P(word0|c)*,...,*(1-P(wordm|c)*p(c)    


贝努利模型是以“文档”为统计单位,即统计某个特征词出现在多少个文档当中 (最大似然方法估计条件概率p(x(i)|c)的时候),当某个特征词在某一个文档中出现多次的时候,贝努利模型忽略了出现的次数,只算作一次。而多项式模型是以“词”为统计单位,当某个特征词在某个文档中多次出现的时候,与贝努利模型相反,它算作多次。


 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值