本文按照 案例-分析-代码-原理 四段式进行介绍,为便于有一定理论基础的童鞋进行学习,将原理以链接其他博客的形式给出,有兴趣的童鞋可以跳转进行学习和推敲。
【案例介绍】利用竞争神经网络和自组织特征隐射网络建立根据离子浓度判别水质分类模型
山泉水中含有多种矿物质,但其是否可以直接引用还需要对水质进行鉴别。一般根据水质中的多种离子浓度进行水质的判断,现根据6组水质特征进行判断,结果分为4类别,其数据集结构如下:
山泉水特征数据集结构 1~6 7~18 19~27 28~35 36~39 类别1(Train) 类别2(Train) 类别3(Train) 类别4(Train) 类别1-2-3-4(Test) 根据以上数据集,划分训练集和测试集,分别采用竞争神经网络和自组织特征映射神经网络进行建模,由于这两组方法属于无监督机器学习,因此在训练网络时,只需要输入训练输入数据,并定义相关参数即可。对神经网络的输出值可通过对比实际类别标签,对得到的聚类进行整合,并与实际类别建立映射关系。
【代码分析】Matlab 竞争神经网络和自组织特征映射网络建立及测试代码
%% I. 清空环境变量
clear all
clc%% II. 训练集/测试集产生
%%
% 1. 导入数据
load water_data.mat%%
% 2. 数据归一化
attributes = mapminmax(attributes);%%
% 3. 训练集和测试集划分% 训练集——35个样本
P_train = attributes(:,1:35);
T_train = classes(:,1:35);
% 测试集——4个样本
P_test = attributes(:,36:end);
T_test = classes(:,36:end);%% III. 竞争神经网络创建、训练及仿真测试
%%
% 1. 创建网络
net = newc(minmax(P_train),4,0.01,0.01);%%
% 2. 设置训练参数
net.trainParam.epochs = 500;%%
% 3. 训练网络
net = train(net,P_train);%%
% 4. 仿真测试% 训练集
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);%% IV. SOFM神经网络创建、训练及仿真测试
%%
% 1. 创建网络
net = newsom(P_train,[4 4]);%%
% 2. 设置训练参数
net.trainParam.epochs = 200;%%
% 3. 训练网络
net = train(net,P_train);%%
% 4. 仿真测试% 训练集
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);%% V. 结果对比
%%
% 1. 竞争神经网络
result_compet_1 = [T_train' T_sim_compet_1']
result_compet_2 = [T_test' T_sim_compet_2']%%
% 2. SOFM神经网络
result_sofm_1 = [T_train' T_sim_sofm_1']
result_sofm_2 = [T_test' T_sim_sofm_2']
竞争神经网络结果分析:
result_compet_1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 1 4 1 4 4 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 4 4 4 4 1 1 1 1
result_compet_2 1 2 3 4 1 1 3 4 在上两张表中,第一张表示训练数据,第二张表示测试数据,以训练数据为例说明。由于竞争神经网络为无监督学习,因此第一张表中并不是表示预测值和标签的对应关系。
在第一张表中,白色行表示T_train,即真实的类别数据(标签),而紧随位于下方的灰色行是由竞争神经网络所得出的聚类,并给不同的聚类赋予了不同的编号,以第一张表的前三个数据组为例,灰色行表示神经网络的预测输出,含有聚类1和聚类4,且其都可以指向真实值(标签)1类,因此对表一进行归纳,可得到如下结论:竞争神经网络输出聚类1,可能表示泉水为类别1或类别2或类别4;输出聚类2不存在;输出聚类3仅存在类别3一种可能;输出聚类4仅存在类别4一种可能。在第二张表,即测试表中可同理进行推理归纳。
自组织特征映射网络结果分析:
按照竞争神经网络对结果分析的过程,同样对应于自组织特征映射网络中,具体结果大家可以运行以上代码得到,这里将整理好的结果给出如下(取训练数据为例):
自组织特征映射训练结果 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 7 12 6 15 12 3 3 3 3 3 3 4 3 2 2 4 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 10 11 13 13 14 9 13 9 13 8 12 16 8 1 1 1 1 注:标红部分为唯一确定类别的聚类,黑色数字不能确定属于哪个类别,需要进一步判断。运用拓扑结构表示,结果如下所示:
自组织特征映射网络训练聚类排布 类别1 类别2 类别3 类别4 聚类2,6,7,12,15 聚类2,3,4 聚类9,10,11,13,14 聚类 1,8,12,16 上图中,颜色深浅表示距离远近。图中共有16各紫色六边形,表示网络训练出来的16个聚类,距离2,6聚类连接颜色为亮黄色,说明其间距很小,这是由于聚类2,6均属于同一标签下的类别1,因此其距离较小;反之,聚类15,16连接颜色为黑色,说明距离很远,这与其归属于不同类别(类别1和类别4)相辅相成。
总结:
- 竞争神经网络主要算法位于newc.m文件;自组织特征映射网络主要算法位于newsom.m文件。
- 两种方法均是在RBF神经网络的基础上发展起来的,可根据原理将三者进行对比分析。
- 童鞋们也可以自己添加误差函数,一般取为错误预测数/样本总数*100%,并比较两者之间计算的准确性。
【附件下载】 含数据集与Matlab源码等文件下载(百度云)
1、通过百度云进行下载:
链接:https://pan.baidu.com/s/1WMU82T326CS9P14YgqoVUg
提取码:288u
2、使用微信扫描进行文件下载:
【原理链接】 竞争神经网络和自组织特征映射网络原理介绍