(转载)无监督学习神经网络的分类(matlab实现)

        对于监督学习神经网络,事先需要知道与输入相对应的期望输出,根据期望输出与网络输出间的偏差来调整网络的权值和阈值。然而,在大多数情况下,由于人们认知能力以及环境的限制,往往无法或者很难获得期望的输出,在这种情况下,基于有导师学习的神经网络往往是无能为力的。
        与有导师学习神经网络不同,无监督学习神经网络在学习过程中无需知道期望的输出。其与真实人脑中的神经网络类似,可以通过不断地观察、分析与比较,自动揭示样本中的内在规律和本质,从而可以对具有近似特征(属性)的样本进行准确地分类和识别。本章将详细介绍竞争神经网络与自组织特征映射(SOFM)神经网络的结构及原理,并以实例说明其具体的应用范围及效果。

1 理论基础

1.1 竞争神经网络概述

        1.竞争神经网络的结构
        竞争神经网络是一种典型的、应用非常广泛的无导师学习神经网络,其结构如图1所示。竞争神经网络一般由输入层和竞争层组成。与RBF等神经网络类似,输入层仅实现输入模式的传递,并不参与实际的运算。竞争层的各个神经元以相互竞争的形式来赢得对输入模式的响应,最终只有一个神经元赢得胜利,并使与该获胜神经元相关的各连接权值和阈值向着更有利于其竞争的方向发展,而其他神经元对应的权值和阈值保持不变。
(转载)无监督学习神经网络的分类(matlab实现)_第1张图片

图1 竞争神经网络结构 

        2.竞争神经网络的学习算法
        如前文所述,竞争神经网络在学习的过程中,仅用到了样本的输入信息,无须知晓样本对应的输出信息。因此,其学习算法与有导师学习神经网络的学习算法有着本质上的区别。
        (1)网络初始化
        如图1所示,输入层由R个神经元构成,竞争层由S1个神经元构成。不失一般性,设训练样本的输入矩阵为
(转载)无监督学习神经网络的分类(matlab实现)_第2张图片

(转载)无监督学习神经网络的分类(matlab实现)_第3张图片

(转载)无监督学习神经网络的分类(matlab实现)_第4张图片

        3.竞争神经网络的MATLAB工具箱函数
        函数newc用于创建一个竞争神经网络,其调用格式为
net =newc(PR,S,KLR,CLR)
        其中,PR为输入变量的最小及最大值构成的矩阵;S为竞争层神经元个数;KLR为权值 的学习速率(默认为0.01);CLR为阈值的学习速率(默认为0.001);net为创建好的竞争网络。

1.2 SOFM神经网络概述

        1.SOFM神经网络的结构

(转载)无监督学习神经网络的分类(matlab实现)_第5张图片

图2 OFM神经网络结构 

        自组织特征映射(self-organizing feature mapping,SOFM)神经网络是Kohonen于1981年根据神经元有序的排列可以反映出所感觉到的外界刺激的某些物理特性而提出的。其主要思想是在学习过程中逐步缩小神经元之间的作用邻域,并依据相关的学习规则增强中心神经元的激活程度,从而去掉各神经元之间的侧向连接,以达到模拟真实大脑神经系统“近兴奋远抑制"的效果。如图2所示,SOFM神经网络的结构与竞争神经网络的结构类似,是一个由输入层和自组织特征映射层(竞争层)组成的两层网络。在竞争神经网络中,每次仅有一个神经元获胜,即只有一个神经元的权值和阈值得到修正。而在SOFM神经网络中,不仅与获胜神经元对应的权值和阈值得到调整,其邻近范围内的其他神经元也有机会进行权值和阈值调整,这在很大程度上改善了网络的学习能力和泛化能力。
        2.SOFM神经网络的学习算法
        SOFM神经网络的学习算法与竞争神经网络的学习算法类似,仅在权值调整部分有较大差异。

(转载)无监督学习神经网络的分类(matlab实现)_第6张图片

        (4)学习速率及邻域更新
        获胜神经元及其邻域内的神经元权值更新完成后,在进入下一次迭代前,需要更新学习速率及邻域,即

(转载)无监督学习神经网络的分类(matlab实现)_第7张图片

        (5)迭代结束判断
        若样本没有学习完,则再另外随机抽取一个样本,返回步骤(2)。否则,若N
        3.SOFM神经网络的MATLAB工具箱函数
        函数newsom用于创建一个SOFM神经网络,其调用格式为
net=newsom(P,[D1,D2,...],TFCN,DFCN,STEPS,IN)
        其中,P为网络输入向量;Di为网络第i层的维数(默认为[58]);TFCN为网络的拓扑函数(默认为‘hextop’);DFCN为网络的距离函数(默认为'linkdist');STEPS为邻近距离递减到1的步数(默认为100);IN为初始的邻近距离(默认为3);net为创建好的SOFM网络。

2 案例背景

2.1 问题描述

        近年来,国内煤矿事故时有发生,严重危害了人民的生命和财产安全。其中,由于煤矿突水造成的事故不容忽视。因此,不少专家和学者致力于研究矿井突水事故的预防,突水水源的判别对预测矿井突水事故的发生有着重要的意义。相关研究表明,可以利用水化学法判别矿井的突水水源,其基本依据是:由于受到含水层的沉积期、地层岩性、建造和地化环境等诸多因素的影响,使储存在不同含水层中的地下水主要化学成分有所不同。为了准确地判别突水水源,需要综合多种因素,用得比较多的是“7大离子"溶解氧、硝酸根离子等。
        目前,有很多种判别突水水源的方法,如模糊综合评判、模糊聚类分析、灰色关联度法等,然而这些方法都要事先假定模式或主观规定一些参数,致使评价的结果主观性较强。现采集到某矿的39个水源样本,分别来自于4个主要含水层:二灰和奥陶纪含水层、八灰含水层、顶板砂岩含水层和第四系含水层(砂砾石成分以石灰岩为主)。以每个水源样本中的\text Na^+\text K^+\text Ca^{2+}\text {Mg}^{2+}\text{Cl}^-\text{SO}_4^{2-}\text{HCO}_3^-7种离子的含量作为判别因素,试利用竞争神经网络和SOFM神经网络分别建立判别模型,并对模型的性能进行综合评价。

2.2 解题思路及步骤

        依据问题描述中的要求,实现竞争神经网络及SOFM神经网络的模型建立及性能评价,可以分为以下几个步骤,如图3所示。

图3 模型建立步骤 

        1.产生训练集/测试集
        由于采集到的水源样本较少,为了保证所建立的判别模型具有较好的泛化性能,这里从每个含水层中取出一个水源样本(共4个样本)作为测试集,剩下的35个水源样本作为训练集。
        2.创建/训练竞争神经网络
        创建竞争神经网络前需要确定网络的结构,即竞争层神经元的数目与待分的类别数目相等,如问题描述所示,水源样本来自于4个不同的含水层,因此,竞争层神经元的数目为4。同时,还应考虑权值学习速率、阈值学习速率及训练次数等参数对网络性能的影响。
        3.创建SOFM神经网络
        创建SOFM神经网络前需要确定网络的结构,即确定竞争层神经元的数目及拓扑结构。同时,还应考虑邻近距离、距离函数及训练次数等参数对网络性能的影响。
        4.仿真测试
        判别模型训练完成后,便可以将测试集的4个水源样本对应的7个判别因素送入模型,模型的输出对应的便是各个水源样本的预测类别。
        5.性能评价
        通过对比预测类别与真实类别,可以对所建立的判别模型的性能进行综合评价。并通过研究网络结构及相关参数对网络性能的影响,寻求理想的网络结构及参数,从而使得判别模型的泛化能力得到不断的提升和改善。

3 MATLAB程序实现

        利用MATLAB神经网络工具箱提供的函数,可以方便地在MATLAB环境下实现上述步骤。
%% 清空环境变量
clear all
clc

%% 训练集/测试集产生

% 导入数据
load water_data.mat
% 数据归一化
attributes = mapminmax(attributes);
% 训练集——35个样本
P_train = attributes(:,1:35);
T_train = classes(:,1:35);
% 测试集——4个样本
P_test = attributes(:,36:end);
T_test = classes(:,36:end);

%% 竞争神经网络创建、训练及仿真测试

% 创建网络
net = newc(minmax(P_train),4,0.01,0.01);
% 设置训练参数
net.trainParam.epochs = 500;
% 训练网络
net = train(net,P_train);
% 仿真测试
% 训练集
t_sim_compet_1 = sim(net,P_train);
T_sim_compet_1 = vec2ind(t_sim_compet_1);
% 测试集
t_sim_compet_2 = sim(net,P_test);
T_sim_compet_2 = vec2ind(t_sim_compet_2);

%% SOFM神经网络创建、训练及仿真测试

% 创建网络
net = newsom(P_train,[4 4]);
% 设置训练参数
net.trainParam.epochs = 200;
% 训练网络
net = train(net,P_train);
% 仿真测试
% 训练集
t_sim_sofm_1 = sim(net,P_train);
T_sim_sofm_1 = vec2ind(t_sim_sofm_1);
% 测试集
t_sim_sofm_2 = sim(net,P_test);
T_sim_sofm_2 = vec2ind(t_sim_sofm_2);

%% 结果对比

% 竞争神经网络
result_compet_1 = [T_train' T_sim_compet_1']
result_compet_2 = [T_test' T_sim_compet_2']
% SOFM神经网络
result_sofm_1 = [T_train' T_sim_sofm_1']
result_sofm_2 = [T_test' T_sim_sofm_2']

说明:

       1.39个水源样本数据存放在water_data.mat文件中,其包含的变量attributes和classes分别对应判别因素和类别。如前文所述,前35个样本作为训练集建立判别模型,剩余的4个样本(分别对应4个类别)作为测试集对模型的性能进行评价。
        2.
为了减少输入变量间的变化较大(不属于同一数量级)对模型性能的影响,在模型建立之前有必要对输入变量进行归一化。这里采用函数mapminmax进行归一化预处理,具体用法请参考帮助文档。低版本的MATLAB中,归一化函数为premnmx,反归一化函数为postmnmx。
        3.(1)result_compet_1为35行2列的矩阵,分别表示竞争神经网络训练集的真实类别和对应的获胜神经元标号。(2)result_compet_2为4行2列的矩阵,分别表示竞争神经网络测试集的真实类别和对应的获胜神经元标号。(3)result_sofm_1为35行2列的矩阵,分别表示SOFM神经网络训练集的真实类别和对应的获胜神经元标号。(4)result_sofm_2为4行2列的矩阵,分别表示SOFM神经网络测试集的真实类别和对应的获胜神经元标号。

3.6 结果分析

        由于网络在训练的过程中采取的是随机抽取训练样本的方法,因此每次运行的结果都会有所不同。某次运行的结果如表27-1所列。从表中不难发现以下几点:
        (1)对于竞争神经网络,第Ⅱ类水源样本大多与竞争层第1个神经元相对应(仅有第15号样本对应的是竞争层第3个神经元),因此可以认定对于第Ⅱ类水源样本而言,竞争层第1个神经元为获胜神经元。同理,可以认定,对于第Ⅲ类水源样本而言,竞争层第2个神经元为获胜神经元(仅有第20号样本对应的是竞争层第3个神经元)。然而,对于第I类和第IV类水源样本而言,则很难确定与之对应的获胜神经元。据此对应关系,可以发现测试集中37号和38号样本分类正确,而36号和39号样本难以判断。
        (2)对于SOFM神经网络,第I类水源样本对应的获胜神经元编号为3、8、11、12、14;第Ⅱ类水源样本对应的获胜神经元编号为14、15、16;第Ⅲ类水源样本对应的获胜神经元编号为1、2、5、6;第IV类水源样本对应的获胜神经元编号为4、7、8、13。据此对应关系可以发现,测试集中4个水源样本对应的获胜神经元编号在训练集中对应的获胜神经元编号集合内,因此,可以认定判别正确率为100%。值得一提的是,若测试集中某个水源样本的预测获胜神经元编号为8,则难以界定其属于第I类或是第IV类水源样本。同理,若测试集中某个水源样本的预测获胜神经元编号为14,则难以界定其属于第I类或是第Ⅱ类水源样本。
表1 竞争神经网络与SOFM神经网络预测结果对比
(转载)无监督学习神经网络的分类(matlab实现)_第8张图片
        与之类似,若测试集中某个水源样本的预测获胜神经元编号为9或者10,则难以确定其属于哪一类水源样本。这是因为在训练过程中,竞争层9号和10号神经元从未赢得获胜机会,一直处于抑制状态,即成为所谓的“死”神经元。从图4中的竞争层各个神经元成为获胜神经元的统计次数也可以直观地观察到这一点。
(转载)无监督学习神经网络的分类(matlab实现)_第9张图片
        值得一提的是,图4中神经元的编号方式是从左至右,从下至上,神经元编号逐渐增加,即左下角的神经元编号为1,右上角的神经元编号为16。神经元编号与其获胜次数间的映射关系如表2所列。  
表2神经元编号与其获胜次数间的映射关系  (转载)无监督学习神经网络的分类(matlab实现)_第10张图片
        图25为竞争层各个神经元与其周围邻近神经元间的距离分布图,相邻神经元间填充区域的颜色表示两个神经元间的距离远近程度。颜色愈深(接近于黑色),表明神经元间的距离越远。从图中可以看出,2号与3号神经元间的距离较远,3号神经元与4号神经元间的距离较远,同时,从表27-1中可以看到,2、3、4号获胜神经元分别对应第Ⅲ、I、IV类水源样本,这表明,不同类别对应的获胜神经元间距离较远。同理,可以观察出,同一类别对应的获胜神经元间的距离较近,如14、15与16号神经元间的距离较近,均对应第Ⅱ类水源样本。其余类别分析方法类似,此处不再一一列举。  

4.总结

4.1 竞争神经网络与SOFM神经网络性能对比

        从表1及上述分析结果可以清晰地看出,与竞争神经网络相比,SOFM神经网络的性能更好,泛化能力更强(即使SOFM神经网络中存在“死”神经元问题)。这是因为,竞争神经网络在学习时,每次仅有一个神经元赢得获胜机会,只有获胜神经元对应的权值得到调整。而SOFM神经网络虽然每次亦只有一个神经元赢得获胜机会,但其及其邻近范围内的神经元对应的权值同时进行修正,朝着更有利于其获胜的方向调整。同时,SOFM神经网络逐渐缩小其邻域范围,逐渐“排斥”邻近的神经元。这种“协作”与“竞争”相结合的模式使得其性能更加优越。

4.2 案例延伸

        近年来,竞争神经网络与SOFM神经网络的算法越来越受到人们的重视,已经成为继BP网络之后研究最多、应用最广泛的一种神经网络模型。然而,越来越多的实践研究表明,竞争层中“死”神经元对网络性能的影响较大。对于“死”神经元,增加其阈值的调整幅度,可以使其逐渐成为获胜神经元,从而赢得公平竞争的机会。同时,SOFM神经网络需预先设定网络的拓扑结构,在训练过程中其拓扑结构保持不变,通常只有在训练结束之后才发现不同的网络拓扑结构也许能得到更好的结果。大多数情况下,并没有先验知识能够让人们事先去选择一个合适的网络规模,所以这些因素严重地影响了SOFM的应用,有待于进一步的研究和实践。

你可能感兴趣的:(神经网络,分类,人工智能,监督学习)