SOFM 网络的MATLAB实现

                                                

    MATLAB 的 NN Toolbox 提供了丰富的函数建立神经网络,主要包括神经网络函数、权值函数、网络的输入函数、传递函数、初始化函数、性能函数、学习函数、自适应函数、以及训练函数等。因此熟练掌握好建立、学习、训练网络的 NNToolbox 非常必要,下面以一个具体的实例说明 SOFM 网络实现仿真的全过程。

SOFM 网络的建立

MATLAB 中 建 立 SOFM 网 络 的 专 用 函 数 是 newsom ( ) , 其 语 法 格 式 为newsom(P,[D1,D2,D3,…,Di]),newsom( )函数返回一个新的自组织特征映射。其中,输入矢量矩阵 P 为 R×2 维矩阵,R 为输入矢量的个数,并且在输入矩阵 P 中必须指明每一个输入矢量的最大、最小范围;i 表示网络层的维数大小。下面结合一个实例介绍一下建立 SOFM 的过程:假设我们随机生成 100 个二维向量,作为样本,并对这些输入向量分类,并绘制其分布。使用默认的函数距离来计算距离。Matlab程序及结果图如下:

%% 1、SOFM网络的建立
clc;
clear;
%随机生成 100 个二维向量,作为样本,并绘制其分布
P = rands(2,100); 				%随机生成100个点,第一行为横坐标,第二行为纵坐标,每个数的范围都是[-1,1]
plot(P(1,:),P(2,:),'+r')		%在二维坐标上画出这100个点
title('初始随机样本点分布');	%
xlabel('P(1)');
ylabel('P(2)');

%建立网络,得到初始权值
net = newsom([0 1;1 2],[5 6]);	%[0 1;1 2]这里限定了初始权值的范围,求取输入向量的最大值最小值,也是为了得到初始权值
w1_init=net.iw{1,1}
%绘制出初始权值分布图
figure;
plotsom(w1_init,net.layers{1}.distances)

%% 2、SOFM网络的训练
for i = 10:30:100		%每循环一次,加30,共训练4次,分别是10,40,70,100
net.trainParam.epochs = i;
net = train(net,P);
figure;
plotsom(net.iw{1,1},net.layers{1}.distances)
end
SOFM 网络的MATLAB实现_第1张图片

                               图1


SOFM 网络的MATLAB实现_第2张图片

2

SOFM 网络的MATLAB实现_第3张图片

                                             图3

SOFM 网络的MATLAB实现_第4张图片

图4说明:

1、图1为二维点的分布。

2、图2为,权值分布,其实总共有60个点,因为[5,6]代表竞争层有30个神经元,而输入层只有2个,即每个竞争层神经元对应着2个输入层的阈值,即二维的点,所以共有60个点都重合了。有些书对于此建立网络的方法的解读,是求取神经元的最大值和最小值,道理是一样的,都是为了把初始阈值设置为最大值和最小值的平均值。向量为R*2,R为输入向量的维数。

3、图3,为训练10次的结果,图4为训练100次的结果。


你可能感兴趣的:(机器学习,机器学习,神经网络,模式识别,算法)