收藏 分享(赏)

朴素贝叶斯分类.doc

上传人:weiwoduzun 文档编号:5641888 上传时间:2019-03-10 格式:DOC 页数:5 大小:54.50KB
下载 相关 举报
朴素贝叶斯分类.doc_第1页
第1页 / 共5页
朴素贝叶斯分类.doc_第2页
第2页 / 共5页
朴素贝叶斯分类.doc_第3页
第3页 / 共5页
朴素贝叶斯分类.doc_第4页
第4页 / 共5页
朴素贝叶斯分类.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、实验一 使用 Nave Bayes 算法构建垃圾邮件分类器一、实验目的1、学习和掌握 Nave Bayes算法;2、编程实现 Nave Bayes算法垃圾邮件分类器,并报告其错误率。二、实验原理1、向量空间模型邮件是一个无结构的文本,需要把它表示成一个向量才能进行计算。一般采用向量空间模型来实现邮件向量化。定义长度为 l的词汇表 V =w1,. . ,wj,. . ,wl ,对于长度为 m,由单词(称为一个 Token)k 顺序组成的邮件 d1,. . . m ,定义一个向量 ,其中 xi = ti ( )/(l ) ,其中 ti ( )是第 i 个 Token 在 中的出现次数, (l )是

2、 中的Token 总数。2、用贝叶斯网络形式化概率分布器一个贝叶斯分类器就是用于分类任务的贝叶斯网络,它包含了一个代表类别变量的节点 C,以及代表特征变量的节点 Xi。给定一个实例 x( 特征变量的一组值 x1,x2,. . . , xn) ,贝叶斯网络能让我们计算出每个可能的类别 ck的概率 P(C = ck | X = x) ,而分类的任务就是找出使得 P(C = ck | X = x)最大的 ck。根据贝叶斯定理这个式子中,P(X = x)对每个类别 ck都相同,不需要考虑。先验概率 P(C = ck)可以用样本空间中属于类别 ck中的向量总数占样本空间中的向量总数的比例表示。最关键的就

3、是计算 P(X = x | C = ck) 。3、朴素贝叶斯分类算法朴素贝叶斯分类算法采用了变量独立假设的最初形式,也是限制最多的一种形式,它假设每个特征变量 Xi在给定类别变量 C 下都是独立的,则有:在计算过程中,取训练样本中 xi的最大似然估计作为给定 ck下的 P(Xi = xi) ,即:其中,nck 是类别 ck的样本数, 是类别 ck中特征变量 Xi值等于 xi的样本数。在计算 时经常等于 0,故采用取对数的方法将其化为: 。朴素贝叶斯的效率很高,设 m 是分类变数的个数,N 是训练样本的个数,则学习朴素贝叶斯模型的时间是 O(mN) ,运行时进行分类的时间是 O(m) 。三、实验

4、设计1、从文本抽取特征向量从文本中抽取特征向量的工作已经被提前做好,所以你只要将其装载到设计好的矩阵中(在文本文类任务中称其为 document-word矩阵) 。在 document-word矩阵中,第 i行表示第 i个文档/邮件,第 j列表示第 j个不同的字段。因而,矩阵中第(i,j)个入口表示的就是在第 i个文档中,第 j个字段出现的次数。2、在 nb_train.m中编写如下代码%LEARN_NAIVE_BAYES_TEXT(Example,V)%此函数学习概率项 P(w|v),描述了从类别 v中的一个文档中随机抽取的一个单词为 w的概率%也学习类别的先验概率 P(V)Spam=0;%

5、垃圾邮件数News=0;%有用邮件数for i=1:numTrainDocsif trainCategory(i)=0News=News+1;elseSpam=Spam+1;endend%PS :类别 V中为有垃圾件的先验概率 P(Spam)%PN :类别 V中为有用邮件的先验概率 P(News)PS=Spam/numTrainDocs;%得到垃圾邮件的概率PN=News/numTrainDocs;%得到有用邮件的概率%Pwj记录类别 V中的学习概率 P(w|v)%NK 记录单词 w出现的次数%N 记录目标值为 v的不同单词位置的总数%flag 标记是邮件分类情况Pwj=zeros(2,num

6、Tokens);Nk=zeros(2,numTokens);Nn=zeros(2,1);for i=1:numTrainDocsif trainCategory(i)=0flag=1;elseflag=2;endfor j=1:numTokensNn(flag,1)=Nn(flag,1)+trainMatrix(i,j);Nk(flag,j)=Nk(flag,j)+trainMatrix(i,j);endendfor i=1:2for j=1:numTokensPwj(i,j)=(Nk(i,j)+1)/(Nn(i,1)+numTokens);endend3、在 nb_test.m中添加如下代码

7、%Yes为分类正确的概率%No为分类错误的概率for i=1:numTestDocsYes=log10(PS);No=log10(PN);for j=1:numTokensfor k=1:testMatrix(i,j)Yes=Yes+log10(Pwj(1,j);No=No+log10(Pwj(2,j);endendif YesNooutput(i)=0;elseoutput(i)=1;endend三、实验结果1、在 MATLAB Command Window下输入: run(nb_train) run(nb_test)得到如下结果:2、当训练集样本数量为 50时:即错误率为 0.0450。3、当训练集样本数量为 400时:即错误率为 0.0163。4、当训练集样本数量分别为 50、100、200、400、800、1400 时有:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报