iris数据集下的朴素贝叶斯
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据挖掘
(计科一班——杨平——1025115034)
题目:iris 数据集下的朴素贝叶斯实现
一.问题描述:
Iris 数据集是在分类和模式识别研究中常用的基准数据。它是根据花瓣和萼片的长度和宽度来对Iris 进行分类。Iris 数据集包含3类4维样本,分别标为1, 2, 3。其中, 每类样本数目为50, 且服从正态分布,每个数据样本有4个特征向量,分别代表萼片长度, 萼片宽度, 花瓣长度和花瓣宽度。
分类是利用预定的已分类数据集构造出一个分类函数或分类模型(也称作分类器),并利用该模型把未分类数据映射到某一给定类别中的过程。
原理描述: 贝叶斯公式1(|)()(|)max ()
m i i i j P X P P X P X ωωω==的实质是通过观察样本将状态的先验概率转化为状态的后验概率,给定一个未知类别的数据样本X ,贝叶斯分类法将预测X 属于具有最高后验概率的类。本问题可以数学描述为多元正态概率型下的最小错误率贝叶斯分类。
1)先验概率
设数据库表有d 个属性,因此,可以用一个d 维列向量12[,,...,]T d x x x x =来表示。同时,假定有c 个类12,,...c ωωω。如果类的先验概率未知,则可以假定这些类是等概率的,即
12()()...()c P P P ωωω===,且()i i S P S
ω= 其中,i S 是类i ω中的训练样本数,而S 是训练样本总数。
2)参数估计
对于多变量正态分布,估计其均值和方差:
11ˆN k k x N
μ==∑ 11ˆˆ()()N T k k k N x x μμ==--∑∑
其中,k x 为多元正态分布总体中第K 个抽样,是d 维向量,ˆμ
是均值向量μ的最大似然估计,∑是协方差矩阵的最大似然估计。
二.利用python 调用matlab 函数,实现联合开发 .m 文件见于附录
下面是python 调用matlab 方法实现
from win32com.client import Dispatch
h = Dispatch("Matlab.application")#启动MATLAB 自动化服务器
h.execute("Iris_import.m")
h.execute("compare3.m")
三.附录
(1). “compare3.m ”文件
function max=compare3(a,b,c)
max=a;
if max
max=b;
end
if max max=c; End (2).“Iris_import.m ”文件 clc; clear all; d=4;c=3;N=50; D=load('Iris_data.txt'); data=zeros(150,d); G1=zeros(50,d); G2=zeros(50,d); G3=zeros(50,d); for i=1:1:4 data(:,i)=D(:,i+1); end for i=1:1:N G1(i,:)=data(i,:); G2(i,:)=data(i+N,:); G3(i,:)=data(i+2*N,:); end disp(G1); disp(G2); disp(G3); %计算各组的均值向量和协方差矩阵 miu1=mean(G1,1) miu2=mean(G2,1) miu3=mean(G3,1) sigma1=zeros(d,d); sigma2=zeros(d,d); sigma3=zeros(d,d); for i=1:1:N sigma1=sigma1+(G1(i,:)-miu1)'*(G1(i,:)-miu1); sigma2=sigma2+(G2(i,:)-miu2)'*(G2(i,:)-miu2); sigma3=sigma3+(G3(i,:)-miu3)'*(G3(i,:)-miu3); end sigma1=sigma1/N sigma2=sigma2/N sigma3=sigma3/N %代入判别函数,实现分类 R=zeros(150,3); fid=fopen('classifier_result.txt','wt'); for i=1:1:150 R(i,1)=-1/2*(data(i,:)-miu1)*inv(sigma1)*((data(i,:)-miu1)')-1/2*log(det(sigma1)); R(i,2)=-1/2*(data(i,:)-miu2)*inv(sigma2)*((data(i,:)-miu2)')-1/2*log(det(sigma2)); R(i,3)=-1/2*(data(i,:)-miu3)*inv(sigma3)*((data(i,:)-miu3)')-1/2*log(det(sigma3)); switch (compare3(R(i,1),R(i,2),R(i,3))) case R(i,1) fprintf(fid,'第%-2d个样本属于第1类\n',i); case R(i,2) fprintf(fid,'第%-2d个样本属于第2类\n',i); otherwise R(i,3) fprintf(fid,'第%-2d个样本属于第3类\n',i); end end fclose(fid); (3).”Iris_data” 四.实验结果 得到每一类的协方差矩阵如下: