machine learning分类方法的详细总结
有导师学习神经网络的分类
广义回归神经网络(GRNN)
1.GRNN结构
GRNN最早是由Specht提出的,是RBF神经网络的一个分支,是一种基于非线性回归理
论的前馈式神经网络模型。
GRNN的结构如图所示,一般由输人层、隐含层和输出层组成。输人层仅将样本
变量送入隐含层,并不参与真正的运算。隐含层的神经元个数等于训练集样本数,该层的权值
函数为欧式距离函数(用|dist表示),其作用为计算网络输人与第一层的权值IW,之间的距
离,b为隐含层的阈值。隐含层的传递函数为径向基函数,通常采用高斯函数作为网络的传
递函数。网络的第三层为线性输出层,其权函数为规范化点积权函数(用nprod表示),计算网
络的向量为n',它的每个元素就是向量a'和权值矩阵LW每行元素的点积再除以向量a'
的各元素之和得到的,并将结果n提供给线性传递函数a=purelin(n'),计算网络输出。
概率神经网络(PNN)
1.PNN结构
PNN是一种前馈型神经网络,由Specht在1989年提出,他采用Parzen 提出的由高斯函
数为基函数来形成联合概率密度分布的估计方法和贝叶斯优化规则,构造了一种概率密度分
类估计和并行处理的神经网络。因此,PNN既具有一般神经网络所具有的特点,又具有很好
的泛化能力及快速学习能力。
PNN的结构如图所示,与GRNN类似,由输人层、隐含层及输出层组成。与
GRNN不同的是,PNN的输出层采用竞争输出代替线性输出,各神经元只依据Parzen方法来
求和估计各类的概率,从而竞争输入模式的响应机会,最后仅有一个神经元竞争获胜,这样获
胜神经元即表示对输人模式的分类。
在数学上,PNN的结构合理性可由Cover定理证明,即对于一个模式问题,在高维数据空
间中可能解决在低维空间不易解决的问题。这就是PNN隐含层神经元较多的原因,即隐含
层空间维数较高。隐含层空间的维数和网络性能有着直接的关系,维数越高,网络的逼近精度
就越高,但带来的负面后果是网络复杂度也随之提高。
题目及代码
植物的分类与识别是植物学研究和农林业生产经营中的重要基础工作,对于区分植物种
类,探索植物间的亲缘关系、阐明植物系统的进化规律具有重要意义。目前常用的植物种类鉴
别方法是利用分类检索表进行鉴定,但该方法花费时间较多,且分类检索表的建立是一件费时
费力的工作,需要投入大量的财力物力。
叶片是植物的重要组成部分,叶子的外轮廓是其主要形态特征。在提取叶子形态特征的
基础上,利用计算机进行辅助分类与识别成为当前的主要研究方向,同时也是研究的热点与
重点。
现采集到150组不同类型鸢尾花(Setosa、Versicolour和Virginica)的4种属性:尊片长
度﹑芎片宽度、花瓣长度和花瓣宽度,样本编号与4种属性的关系如图26–3所示(其中,样本
编号150为Setosa,51100为Versicolour,101~150为Virginica)。从图中大致可以看
出,花瓣长度、花瓣宽度与鸢尾花类型间有较好的线性关系,而芎片长度、雩片宽度与鸢尾花类
型间呈`现出非线性的关系。
现要求:
(1)利用GRNN和PNN分别建立鸢尾花种类识别模型,并对模型的性能进行评价。
(2)利用GRNN和PNN分别建立各个属性及属性组合与鸢尾花种类间的识别模型,并
与(1)中所建模型的性能及运算时间进行对比,从而探求各个属性及属性组合与鸢尾花种类的
相关程度。
% 有导师学习神经网络的分类 -- 鸢尾花种类识别
clear
clc
% 产生训练集/测试集
load iris_data.mat
Ptrain = [];
ttrain = [];
Ptest = [];
ttest = [];
for i = 1:3
tempinput = features((i-1)*50+1:i*50,:);
tempoutput = classes((i-1)*50+1:i*50,:);
n = randperm(50);
Ptrain = [Ptrain tempinput(n(1:40),:)'];
ttrain = [ttrain tempoutput(n(1:40),:)'];
Ptest = [Ptest tempinput(n(41:50),:)'];
ttest =[ttest tempoutput(n(41:50),:)'];
end
% 建立模型
resultgrnn = [];
resultpnn = [];
timegrnn = [];
timepnn = [];
for i = 1:4
for j = i:4
ptrain = Ptrain(i:j,:);
ptest = Ptest(i:j,:);
t = cputime;
netgrnn = newgrnn(ptrain,ttrain);
tsimgrnn = sim(netgrnn,ptest);
Tsimgrnn = round(tsimgrnn);
t = cputime - t;
timegrnn = [timegrnn t];
resultgrnn = [resultgrnn Tsimgrnn'];
t = cputime;
tctrain = ind2vec(ttrain);
netpnn = newpnn(ptrain,tctrain);
tctest = ind2vec(ttest);
tsimpnn = sim(netpnn,ptest);
Tsimpnn = vec2ind(tsimpnn);
t = cputime - t;
timepnn = [timepnn t];
resultpnn = [resultpnn Tsimpnn'];
end
end
% 性能评价
accuracygrnn = [];
accuracypnn = [];
time = [];
for i = 1:10
accuracy1 = length(find(resultgrnn(:,i)==ttest'))/length(ttest);
accuracy2 = length(find(resultpnn(:,i)==ttest'))/length(ttest);
accuracygrnn = [accuracygrnn accuracy1];
accuracypnn = [accuracypnn accuracy2];
end
result = [ttest' resultgrnn resultpnn];
accuracy = [accuracygrnn;accuracypnn];
time = [timegrnn;timepnn];
% 画图
figure(1)
plot(1:30,ttest,'bo',1:30,resultgrnn(:,4),'r-*',1:30,resultpnn(:,4),'k:^')
grid on
xlabel('测试集样本编号')
ylabel('测试集样本类别')
string = {'测试集预测结果对比(GRNN vs PNN)';['正确率',num2str(accuracygrnn(4)*100),'%(GRNN) vs',num2str(accuracypnn(4)*100),'%(PNN)']};
title(string)
legend('真实值','GRNN预测值','PNN预测值')
figure(2)
plot(1:10,accuracy(1,:),'r-*',1:10,accuracy(2,:),'b:o')
grid on
xlabel('模型编号')
ylabel('测试集正确率')
title('10个模型的测试集正确率对比(GRNN vs PNN)')
legend('GRNN','PNN')
figure(3)
plot(1:10,time(1,:),'r-*',1:10,time(2,:),'b:o')
grid on
xlabel('模型编号')
ylabel('运行时间(s)')
title('10个模型的运行时间对比(GRNN vs PNN)')
legend('GRNN','PNN')
无导师学习神经网络的分类
竞争神经网络
1. 竞争神经网络结构
竞争神经网络是一种典型的、应用非常广泛的无导师学习神经网络,其结构如图所
示。竞争神经网络一般由输人层和竞争层组成。与RBF等神经网络类似,输入层仅实现输人
模式的传递,并不参与实际的运算。竞争层的各个神经元以相互竞争的形式来赢得对输人模
式的响应,最终只有一个神经元赢得胜利,并使与该获胜神经元相关的各连接权值和阈值向着
更有利于其竞争的方向发展,而其他神经元对应的权值和阈值保持不变。
SOFM神经网络结构
问题及代码
近年来,国内煤矿事故时有发生,严重危害了人民的生命和财产安全。其中,由于煤矿突
水造成的事故不容忽视。因此,不少专家和学者致力于研究矿井突水事故的预防,突水水源的
判别对预测矿井突水事故的发生有着重要的意义。
相关研究表明,可以利用水化学法判别矿井的突水水源,其基本依据是:由于受到含水层
的沉积期、地层岩性、建造和地化环境等诸多因素的影响,使储存在不同含水层中的地下水主
要化学成分有所不同。为了准确地判别突水水源,需要综合多种因素﹐用得比较多的是“7大
离子”溶解氧﹑硝酸根离子等。
目前,有很多种判别突水水源的方法,如模糊综合评判、模糊聚类分析、灰色关联度法等,
然而这些方法都要事先假定模式或主观规定一些参数,致使评价的结果主观性较强。
现采集到某矿的39个水源样本,分别来自于4个主要含水层:二灰和奥陶纪含水层、八灰
含水层、顶板砂岩含水层和第四系含水层(砂砾石成分以石灰岩为主)。以每个水源样本中的
Nat,K+,Ca2+,Mg’+,Cl-,SO’和HCO,7种离子的含量作为判别因素,试利用竞争神经
网络和SOFM神经网络分别建立判别模型,并对模型的性能进行综合评价。
% 无导师学习神经网络分类--矿井突水水源判别
clear
clc
% 产生训练集/测试集
load water_data.mat
attributes = mapminmax(attributes);
ptrain = attributes(:,1:35);
ttrain =classes(:,1:35);
ptest = attributes(:,36:end);
ttest = classes(:,36:end);
% 创建/训练竞争神经网络及仿真测试
net = competlayer(4,0.01,0.01);
net.trainParam.epochs = 500;
net = train(net,ptrain);
tsimcompet1 = net(ptrain);
Tsimcompet1 = vec2ind(tsimcompet1);
tsimcompet2 = net(ptest);
Tsimcompet2 = vec2ind(tsimcompet2);
% 创建SOFM神经网络仿真测试
net = selforgmap([4 4]);
net.trainParam.epochs = 200;
net = train(net,ptrain);
tsimsofm1 = net(ptrain);
Tsimsofm1 = vec2ind(tsimsofm1);
tsimsofm2 = net(ptest);
Tsimsofm2 = vec2ind(tsimsofm2);
% 性能评价
resultcompet1 = [ttrain' Tsimcompet1'];
resultcompet2 = [ttest' Tsimcompet2'];
resultsofm1 = [ttrain' Tsimsofm1'];
resultsofm2 = [ttest' Tsimsofm2'];
以下是结果图: