基于朴素贝叶斯模型的两类问题分类

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于朴素贝叶斯模型的两类问题分类
基于朴素贝叶斯模型的两类问题分类
一、实验目的
通过实验,加深对统计判决与概率密度估计基本思想、方法的认识,了解影响Bayes分类器性能的因素,掌握基于Bayes决策理论的随机模式分类的原理和方法,并理解ROC曲线的意义
二、实验内容
通过Bayes决策理论的分类器,从给定样本集选择训练集以及测试集进行训练并分类,用matlab实现,绘制ROC曲线,得到最优的分类阈值
三、实验原理
Bayes分类器的基本思想是依据类的概率、概密,按照某种准则使分类结果从统计上讲是最佳的。

换言之,根据类的概率、概密将模式空间划分成若干个子空间,在此基础上形成模式分类的判决规则。

准则函数不同,所导出的判决规则就不同,分类结果也不同。

使用哪种准则或方法应根据具体问题来确定
朴素贝叶斯的一个基本假设是所有特征在类别已知的条件下是相互独立的,即
p(x│w_i )=p(x_1,x_2,...,x_d│w_i )=∏_(j=1)^d?〖p(x_j│w_i )〗在构建分类器时,只需要逐个估计出每个类别的训练样本在每一维上的分布形式,就可以得到每个类别的条件概率密度,大大减少了需要估计的参数的数量。

朴素贝叶斯分类器可以根据具体问题确定样本在每一维特征上的分布形式,最常用的一种假设是每一个类别的样本都服从各维特征之间相互独立的高斯分布,即
p(x│w_i )=∏_(j=1)^d?〖p(x_j│w_i )=∏_(j=1)^d?{1/(√2πσ_ij ) exp[-(x_j-μ_ij )^2/(2σ_ij )] } 〗
式中u_ij--第i类样本在第j维特征上的均值
σ_ij--相应的方差
可以得到对数判别函数:
〖g〗_i (x)=ln?〖p(x│w_i )〗+ln?P(w_i ) =∑_(j=1)^d?[-1/2 ln?2π-ln?〖σ_ij 〗-(x_j-μ_ij )^2/(2σ_ij )] +ln?P(w_i )=-d/2 ln?2π-∑_(j=1)^d?ln?〖σ_ij-∑_(j=1)^d?〖(x_j-μ_ij )^2/(2σ_ij )+〗〗ln?P(w_i )
其中的第1项与类别无关,可以忽略,由此得到判别函数:
〖g〗_i (x)=ln?P(w_i )-∑_(j=1)^d?ln?〖σ_ij-∑_(j=1)^d?(x_j-μ_ij )^2/(2σ_ij )〗
四、实验步骤
1、用给定的两类样本集,各选取前400个作为训练样本,通过调用MATLAB工具箱的NaiveBayes类的fit函数训练分类器
2、通过1得到的训练器,选取样本集后100个样本作为测试样本,得到分类结果。

3、对测试集的分类结果进行统计,计算正确率。

4、绘制相应的ROC曲线
五、实验代码
function [Train,TrainLabel] = getTrain(c1,c2)
%UNTITLED 得到训练样本
% 根据给定两类样本集各选取前400行样本作为训练样本
c1 = c1(1:400,:);
c2 = c2(1:400,:);
c =[c1;c2];
Train=c(:,2:25);
TrainLabel=c(:,1);
end
function [FirstTest,FirstTestLabel] = getFirstTest( c1 )
%UNTITLED2 得到第一类测试集
% 选取第一类样本集的后100行作为测试集
c1 = c1(401:500,:);
FirstTest=c1(:,2:25);
FirstTestLabel=c1(:,1);
end
function [ SecondT est,SecondTestLabel] = getSecondTest( c2 ) %UNTITLED3 得到第二类测试集
% 选取第二类最后100行作为第二类测试集
c2 = c2(401:500,:);
SecondTest=c2(:,2:25);
SecondTestLabel=c2(:,1);
end
function [ right] = getRight(l,realLabel)
%UNTITLED4 得到正确率
% 根据预测结果以及真实类别标号统计预测正确个数得到正确率
count=0;
for i=1:100
if(l(i)==realLabel)
count=count+1;
end
end
right=count/100;
end
function [Fright,Sright,pl,rl] = predict(c1,c2)
%UNTITLED5 得到两类预测正确率
[Train,TrainLabel]=getTrain(c1,c2); %得到训练样本以及类别标号
N=NaiveBayes.fit(Train,TrainLabel); %利用函数进行分类器训练[ft,fl]= getFirstT est(c1); %得到第一类测试样本以及真实类别标号fpl=predict(N,ft); %得到第一类测试样本预测类别标号Fright = getRight(fpl,fl); %得到第一类测试样本分类正确率
[st,sl]= getSecondTest(c2); %得到第二类测试样本以及真实类别标号spl=predict(N,st); %得到第二类测试样本预测类别标号Sright = getRight(spl,sl); %得到第二类测试样本分类正确率
pl=[fpl;spl]; %将两类预测标号合并
rl=[fl;sl]; %将两类真实标号合并
end
>> [Fright,Sright,predictLabel,realLabel] = predict(c1,c2);
>> Fright
Fright =
1
>> Sright
Sright =
1
>> plotroc(predictLabel-1,realLabel-1);
在命令行窗口得到两类样本的分类正确率都为100% 可知对于这些测试样本分类效果比较理想,但是如果需要对所有进行比较好的分类的话,应该采取交叉验证的方法。

绘制ROC曲线沿着坐标轴从(0,0)到(1,1)却接近左上角分类效果越好,所以应该选择左上角坐标对应的阈值进行分类。

基于BP神经网络的多类问题划分
一、实验目的
通过实验,加深对BP神经网络方法的认识,了解BP神经网络的训练过程,会使用得到的分类器对给定样本进行分类。

二、实验内容
通过BP神经网络的分类器,从给定样本集选择训练集以及测试集进行训练并分类,用matlab实现,得到分类正确率以及混淆矩阵。

三、实验原理
采用BP算法的神经网络模型称为BP神经网络,一般由输入层、隐层和输出层组成,隐层可以是一层或者多层,每个层中又包含许多单个神经元,在BP神经网络中,层与层之间的神经元是全连接,层内部的神经元之间是无连接的。

各隐层节点的激活函数使用Sigmoid 函数,其输入层和输出层激励函数可以根据应用的不同需要而异。

因此,BP神经网络是前向反馈网络的一种,其网络结构可以采用简要的形式
来描述,如图
输入层隐层输出层
BP神经网络结构
BP算法即误差反向传播(Back Propagation)算法,其主要思想是是把学习过程分为两个阶段:第一阶段(正向传播过程),给出输入信息通过输入层经隐含层处理并计算每个单元的实际输出值;第二阶段(反向过程),若在输出层未能得到期望的输出值,则逐层递归地计算实际输出与期望输出之差值(即误差),以便根据此差值调节权值。

BP算法的基本步骤如下:
设置初始权值W(0)为较小的随机非零值。

给定输入/输出样本集合,
误差指标
总误差指标
重复下列过程直至满足收敛条件()
对于任意一个样本p,计算
正向过程
反向过程
修正权值
对给定测试集利用得到的分类器进行分类。

四、实验步骤
1、对给定的四类样本集随机选取1500个样本作为训练集,其余500个作为测试集。

2、用选取的1500个训练集训练BP神经网络,得到分类器,观察训练过程。

3、利用第2步得到的分类器对测试集进行分类,得到分类结果。

4、利用测试集训练的结果以及真实的类别,得到各类正确率以及总体正确率、混淆矩阵。

相关文档
最新文档