人工智能实验二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
昆明理工大学信息工程与自动化学院学生实验报告
( 2014 — 2015 学年第 1 学期)
课程名称:人工智能及其应用开课实验室:信自504 2014年12月14日
一、实验目的及内容
1.手写数字的识别
-参见week8中的资料
-任选两种方法完成识别
-可选的方法有:模板匹配、欧式举例、bayes、神经网络、决策树等
-需对模式识别的基本原理和过程、本题中涉及的数字特征的提取和表示问题做阐述二、所用仪器、材料(设备名称、型号、规格等或使用软件)
1台PC以及matlab2012软件。
三、实验方法、步骤(或:程序代码或操作过程)
实现方法为四个步骤(1)数据获取和预处理
(2)特征抽取和选择
(3)分类器设计
(4)使用分类器进行分类
数字图像被分成5行5列的格子,共5*5个特征。
X: (x1,x2,x3,…… x25)
共有9个数字,因此X有9类
特征的计算:
统计每个格子中黑色像素的个数,除以该格子中所有的像素数目,即得一个特征手写数字特征保存在templet中,由结构体pattern表示
数字‘1’的5个样本
的特征矩阵
每列代表一个样品
每行代表一个特征
手写数字图像9_1.bmp特征提取的代码如下:
该手写数字的特征向量如右所示:
1.基于二值数据的贝叶斯分类器
计算先验概率P(ωi)
计算类条件(先验)概率P(X| ωi)
P(X| ωi) = ∏P(xj=a| ωi) 其中 i=1…9, j=0…24,a=0或1, P(xj=a| ωi) = (∑xj+1)/(Ni+2)
应用Bayes公式求后验概率
P(ωi|X) = P(ωi)* P(X| ωi)
后验概率最大值的类别就是手写数字的所属类别
Testing 运行: bayesBinaryTest
function y=bayesBinary(sample);
clc;
load templet pattern;
sum=0;
prior=[];%
p=[];
likelihood=[];
P=[];
%calculate prior propability
for i=1:9
sum = sum+pattern(i).num;
end
for i=1:9
prior(i) = pattern(i).num/sum;
end
%calculate likelihood propability
for i=1:9
for j=1:25
sum=0;
for k=1:pattern(i).num
if(pattern(i).feature(j,k)>0.05) sum=sum+1;
end
end
p(j,i)=(sum+1)/(pattern(i).num+2); end
end
for i=1:9
sum=1;
for j=1:25
if(sample(j)>0.05)
sum=sum*p(j,i);
else
sum=sum*(1-p(j,i));
end
end
likelihood(i)=sum;
end
%calculate bayes propability
sum=0;
for i=1:9
sum=sum+prior(i)*likelihood(i);
end
for i=1:9
P(i)=prior(i)*likelihood(i)/sum;
end
[maxval maxpos]=max(P);
y=maxpos;
2.神经网络分类器
Implementation procedure实现步骤
初始化输入输出矩阵p[],t[]。P为训练样本,t为训练样品所属类别构件神经网络(newff函数),设置参数调整方式
Bpnet=newff(x,[50,4],{‘logsig’,’logsig’},’traingd’) 调用matlab的train(bpnet,p,t)函数,训练神经网络
对待测样品,调用sim函数,利用之前已训练好的BP网络进行识别Testing 运行bpnetTest
function y=bpnet(sample)
global bpnet;
clc;
a = sim(bpnet,sample)
a = round(a)
b = num2str(a);
c = bin2dec(b');
y = c
function bpGradientTrain
global bpnet;
clc;
load templet pattern;
c=0;
p=[];
for i=1:9
for j=1:5
c=c+1;
p(:,c)=pattern(i).feature(:,j);
end
end
t=zeros(4,45);
t(4,1:5)=1;
t(3,6:10)=1;
t(3:4,11:15)=1;
t(2,16:20)=1;
t(2,21:25)=1;
t(4,21:25)=1;
t(2:3,26:30)=1;
t(2:4,31:35)=1;
t(1,36:40)=1;
t(1,41:45)=1;
t(4,41:45)=1;
x=ones(25,2);
x(:,1)=0;
bpnet = newff(x,[50,4],{'logsig','logsig','traingd'}); bpnet.trainParam.show=50;
bpnet.trainParam.lr=0.2;
bpnet.trainParam.epochs=2000;