R语言实现SOM(自组织映射)模型(三个函数包+代码)

您所在的位置:网站首页 diamond坐标轴去除b R语言实现SOM(自组织映射)模型(三个函数包+代码)

R语言实现SOM(自组织映射)模型(三个函数包+代码)

#R语言实现SOM(自组织映射)模型(三个函数包+代码)| 来源: 网络整理| 查看: 265

每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~

———————————————————————————

SOM自组织映射神经网络模型 的R语言实现 笔者前言: 最近发现这个被发明于1982年的方法在如今得到了极为广泛的应用,在提倡深度学习的时候,基于聚类的神经网络方法被众多人青睐。但是呢, 网上貌似木有人贴出关于SOM模型的R语言实现,我就抛砖引玉一下。一、SOM模型定义与优劣

自组织映射 ( Self Organization Map, SOM )神经网络是较为广泛应用于聚类的神经网络,它是由 Kohonen提出的一种无监督学习的神经元网络模型。

主要功能是将输入的 n 维空间数据映射到一个较低的维度 (通常是一维或者二维 )输出 ,同时保持数据原有的拓扑逻辑关系。

优劣:

(1)它不是以一个神经元或网络的状态矢量反映分类结果的 ,而是以若干神经元同时 (并行 )反映分类结果 .这种特征映射神经网络通过对输入模式的反复学习 ,使连接权矢量的空间分布能反映输入模式的统计特性。

(2)SOM 神经网络对于解决各类别特征不明显、特征参数相互交错混杂的、非线性分布的类型识别问题是非常有效的(客户行为的客户细分和分类研究也是相当有效的 ,因为客户行为识别本身也是一种复杂多变的问题)。还不了解的童鞋,来带他们看一张图:

SOM模型与普通的神经网络模型相同的是有输入层、黑箱、输出层,但是最大的区别就是在输出层,一般神经网络可能只是某几个点,而SOM在点基础上还加入了线(点与点之间的关系)。具体的原理可自行baidu或者参考列出来的参考文献中,都有较为详细的说明。

二、SOM模型原理

当某个模式输入时,输出层某一神经元得到最大刺激而竞争获胜(产生最大输出值)。同时该获胜神经元周围的一些神经元也因侧向相互作用而受到较大刺激,修改这些神经元和输入神经元之间的连接权值。当输入模式发生变化时,输出层上获胜的输出神经元也发生改变。通过神经网络权值的调整,使得输出层特征分布能反映输入样本的分布情况。据SOM模型的输出状态,不但能够判断输入模式所属的类别,并使得输出神经元代表某一模式类别,还能够得到整个数据区域的大体分布情况,即从样本数据中获得数据分布的大体本质特征。某输入信号模式X=(x1,x2,…,xn)T连接到所有的输入神经元。输出神经元i与所有输入神经元之间连接的权向量为:Wi=(wi1,wi2,…,win)T。输出神经元i的输出值oi:1、初始化:随机选取某个较小的权值。各个输出神经元j的邻接输出神经元集合NEj的选取如图。NEj(t)表示在时刻t时输出单元j的邻接单元的集合,它是随时间的增长而不断缩小的。2、输入: 输入单元接受一组新的输入X=(x1,x2,x3,...,xn) 3、计算输入X和每个输出神经元连接权向量Wj之间的距离dj4、选择具有最小距离的输出神经元j*作为获胜结点。5、调整输出神经元j*及其邻域Nej*(t)内的神经元所连接的权值向量。6、假设样本输入和连接权值都是归一化的,则选择最小距离的神经元就是选择具有最大输出的神经元。SOM模型的特征映射是一种有序的映射,因此它适合于进行特征提取和特征变换。

三、SOM模型的R语言实现——三个函数包介绍

SOM模型在R语言中,目前,我看到的有三个函数包,分别是:Kohonen包、som包、RSNNS包。

补充内容:

SOM的分类是否有意义?

    答:木有,需要进行后续的分析,如客户细分中,还要继续计算每个群落的RFM值的均值,然后进行判断,可参考博客: 

RFM模型及R语言实现

也可以用在离群值筛选中,可参考博客:RFM模型+SOM聚类︱离群值筛选问题

SOM如何合理地自定义分组数量?

    答:笔者认为需要写一个循环语句,来验证一下,哪些组更好。

SOM是神经网络,能够载入训练、验证模型吗?

    答:SOM,自组织映射网络是可以进行训练的,可以先用数据训练模型,然后验证其他数据。

——————————————————————————————————

1、som包

som包是一个单独为som模型的包,里面内嵌的函数已经能够基本应付分析,适合速成分析。 library(som) #输入函数 som(data, xdim, ydim, init="linear", alpha=NULL, alphaType="inverse", neigh="gaussian", topol="rect", radius=NULL, rlen=NULL, err.radius=1, inv.alp.c=NULL)

#结果分析函数 #foo$data源数据 #init 初始化方法 #xdim x的维数 #ydim y的维数 #code 初始矩阵行索引=x维度+y维度*x向量值(行) #visual 每一案例,地图上的维数坐标 qerror是初始向量和最后测试向量的差的平方距离,这个就是分类 #alpha0 学习速率 #alpha 学习训练函数形式 #neigh 近邻函数类型 #topol 输出层近邻函数类型 #qerror 误差的平均 #code.sum xy的计数矩阵(类似混淆矩阵) #som案例 data(yeast) yeast


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3