iris数据集下的朴素贝叶斯

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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”

四.实验结果

得到每一类的协方差矩阵如下:

相关文档
最新文档