-
基于朴素贝叶斯模型的两类问题分类
一、实验目的
通过实验,加深对统计判决与概率
密度估计基本思想、方法的认识,了解影响
Bayes
分
类器性能的因素,掌握基于
Bayes
决策理
论的随机模式分类的原理和方法,并理解
ROC
曲
线的意义
二、实验内容
通过<
/p>
Bayes
决策理论的分类器,从给定样本集选择训练集以及测试
集进行训练并分类,
用
matlab
实
现,绘制
ROC
曲线,得到最优的分类阈值
三、实验原理
Bayes
分类器的基本思想是依据类的概率、概密,按照某种准则使分类结果从统计上讲
是最佳
的。
换言之,
根据类的概率、
概密将模
式空间划分成若干个子空间,
在此基础上形成
模式分类的判决规
则。准则函数不同,所导出的判决规则就不同,
分类结果也不同。使用哪
种准则或方法应根据具体问题来确定
朴素贝叶斯的一个基本假设是所有特征在类别已知的条件下是
相互独立的,即
p(x
│
w_i
)=p(x_1,x_2,...,x_d
│
w_i )=
p>
∏
_(j=1)^d?
〖
< br>p(x_j
│
w_i )
〗
p>
在构建分类器时,
只需要逐个估计出每个类别的训练样本在每一维上
的分布形式,
就可
以得到每个类别的条件概率密度,
大大减少了需要估计的参数的数量。
朴素贝叶斯分类器可
< br>以根据具体问题确定样本在每一维特征上的分布形式,
最常用的一种假设是每一个
类别的样
本都服从各维特征之间相互独立的高斯分布,即
p(x
│
w_i )=
∏
_(j=1)^d?
〖
p(
x_j
│
w_i )=
∏
_(j=1)^d?{1/(
√
2
< br>π
σ
_ij )
exp[-(x_j-
μ
_ij
)^2/(2
σ
_ij )] }
〗
式中
u_ij--
< br>第
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
)-
∑<
/p>
_(j=1)^d?ln?
〖
σ
_ij-
∑
_(j=1)^d?(x_j-
p>
μ
_ij
)^2/(2
σ
_ij
)
〗
四、实验步骤
1
、用给定的两类样本集,各选取前
400
个作为训练样本,通过调用
MA
TLAB
工具箱的
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 [
SecondTest,SecondTestLabel] = getSecondTest( c2 )
%UNTITLED3
得到第二类测试集
%
选取第二类最后
< br>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=(Train,TrainLabel);
%
利用函数进行分类器训练
[ft,fl]= getFirstTest(c1);
%
得到第一类测试样本以及真实类别
标号
fpl=predict(N,ft);
%
得到第一类测试样本预测类别标号
Fright = getRight(fpl,fl);
%
得到第一类测试样本分类正确率
[st,sl]= getSecondTest(c2);
%
得到第二类测试样本以及真实类别
标号
spl=predict(N,st);
%
得到第二类测试样本预测类别标号
Sright = getRight(spl,sl);
%
得到第二类测试样本分类正确率
-
-
-
-
-
-
-
-
-
上一篇:科普类英语词汇修订稿
下一篇:WLAN QOS配置