关注获取源码
https://mp.weixin.qq.com/s/kZuIGgy_yQUKAO5zDXd6Aw
SOM网络有两层:第一层输入层,输入数据的层,是一维的,神经元的个数就是数据特征数;第二层是竞争层,也就是根据输入层输入的数据,神经元之间按照策略进行竞争的层,通常是二维的,行、列神经元个数可通过一些经验规则给定。其中竞争策略是通过下面的方式实现的:竞争层的每个神经元都有权重,当输入层输入某个样本时,就计算所有神经元的权重与该条样本的距离,然后通过规则调整距离比较小的神经元的权重,使得其更接近该样本。
SOM就是将多条高维数据映射到二维的平面上,并且保证相近的数据在平面上的映射位置比较靠近,从而进行聚类。
现有待聚类样本数据集 D D D,维度为 ( N , M ) (N, M) (N,M),其中数据条数为 N N N,每条数据的特征数为 M M M。
开始训练SOM网络:迭代次数 s s s,初始的学习率 u u u,初始的邻域半径 r r r:
(4)计算最佳匹配神经元(BMU):选择一条样本数据 X X X,计算该数据与所有神经元权重之间的数据距离 m m m,其中距离最小的神经元定义为为 B M U BMU BMU;(5)获得邻域内的神经元:根据当前的邻域半径 R ( c s ) R(cs) R(cs)获取邻域中心为 B M U BMU BMU的所有神经元,其中 R ( c s ) R(cs) R(cs)是随着迭代次数的增加使得邻域半径逐渐衰减的函数, c s cs cs是当前的迭代次数;(6)更改样本权重:对邻域中的每一个神经元,根据当前的学习率 U ( c s ) U(cs) U(cs)以及该神经元与 B M U BMU BMU之间的拓扑距离 d d d,计算该神经元的学习率 L ( U ( c s ) , d ) L(U(cs),d) L(U(cs),d)。然后按照下式更新该神经元的权重:W = W + L ( U ( c s ) , d ) ∗ ( X − W ) W = W + L(U(cs),d)*(X-W) W=W+L(U(cs),d)∗(X−W)
其中 L ( U ( c s ) , d ) L(U(cs),d) L(U(cs),d)是关于当前的学习率和神经元之间的拓扑距离的函数,输出的是与 B M U BMU BMU的拓扑距离为 d d d的神经元的学习率,并且 d d d越大,学习率越小; U ( c s ) U(cs) U(cs)是随着迭代次数的增加学习率逐渐衰减的函数;
(7)训练完成:所有样本数据运行完(4)-(6), c s cs cs加1,当其等于 s s s或者误差基本不变时停止迭代;注:神经元个数不宜少;数据距离 m m m就是指的是神经元的M维权重与样本数据之间的距离,例如欧式距离,余弦距离;拓扑距离 d d d指的是神经元网络中的神经元的几何位置之间的距离,例如曼哈顿距离,欧式距离;误差可以定义为所有样本数据与其 B M U BMU BMU的最小数据距离的和;
神经元样式
六边形可视化内容
特征的值的分布(含有类别界限)类别的神经元激活程度样本标签的分布可视化以鸢尾花数据集为例 1.特征的值的可视化 2.神经元击中次数的可视化 3 神经元距离可视化 4 不同类别神经元的激活程度可视化 5 样本归类情况可视化
