机器学习之自组织特征映射神经网络(SOM)

来源:互联网 发布:有哪些可信的网络兼职 编辑:程序博客网 时间:2024/05/21 08:57

SOM是一类“无监督学习”模型,一般的用法是将高维的input数据在低维的空间表示,因此SOM天然是一种降维方法。除了降维,SOM还可以用于数据可视化,以及聚类等应用中[2]。

  1. 定义
    自组织特征映射神经网络(Self-Organizing Feature Map,也称Kohomen映射),简称为SOM网络,主要用于解决模式识别类的问题。SOM网络属于无监督学习算法,与Kmeans算法相似。所不同的是,SOM网络不需要预先提供聚类数量,类别的数据由网络自动识别出来。它的基本思想是:将距离小的个体集合划分为同一类别,而将距离大的个体集合划分为不同的类别。
  2. 相似性测量
    神经网络的输入模式向量的相似性测量可用向量之间的距离来衡量。常用的方法有欧氏距离法和余弦法两种。
  3. SOM网络框架
    SOM特点:只有两层,即输入层和输出层。输出层与其他神经网络不同的是,它与同层的神经元之间建立侧向连接,并可以通过权值的学习形成特定的模式。如一维线阵、二维平面阵和三维栅格阵等。对于二维的训练数据,排列一般是二维的平面阵。
    Kohonen认为,一个神经网络接受外界输入模式时,将会分为不同的对应区域,各区域对输入模式有不同的响应特征,而这个过程是自动完成的。SOM网络正是根据这一看法提出的,其特点与人脑的自组织特性相类似
  4. SOM网络实现步骤:
    (输入层数据和权重都要进行归一化,参考【3】)
    1)输入层网络
    接受外界信息,将输入模式向竞争层传递,起“观察”作用。
    输入层网络节点与数据集同行数、同列数,但数据集需要归一化。
    2)输出层网络(竞争层)
    负责对输入模式进行“分析比较”,寻找规律,并归类
    一般根据数据集的维度来构建输出层网络。例如二维的情况,希望分为4类,输出层可设计为4*2的矩阵
    3)权重节点
    根据输入层的数据集的维度和输出层的的预估分类数,定义权重节点的维度。例如,数据集是二维的,权重的行数就定为2,分4类,权重的列数就选4.权重值一般给定一个0-1之间的随机值。
    4)定义学习率
    学习率会影响收敛速度,可以定义一个动态的学习函数,随着迭代次数的增加而收敛。
    Learn_rate(i)=maxLrate-((i+1.0)*(maxLrate-minLrate))/MaxIteration
    其中,maxLrate为最大学习率,minLrate为最小学习率,MaxIteration为最大迭代次数,i为当前迭代次数。

    5)定义聚类半径函数
    学习半径影聚类效果,可以定义一个动态收缩的半径函数,随着迭代次数的增加而收缩。定义半径函数为:
    R_rate(i)=maxR-(i+1.0)*(maxR-minR)/MaxIteration
    其中,maxR为最大聚类半径,minR为最小聚类半径,MaxIteration为最大迭代次数,i为当前迭代次数。

#学习率和学习半径曲线绘制# coding=utf-8from numpy import *import matplotlib.pyplot as plt#绘制学习率MaxIteration=4000  #最大迭代次数maxLrate=0.8       #最大学习率minLrate=0.05       #最小学习率maxR=5.0           #最大聚类半径minR=0.5           #最小聚类半径X=linspace(0,4000)Y=maxLrate-(X+1.0)*(maxLrate-minLrate)/MaxIterationZ=maxR-((X+1.0)*(maxR-minR))/MaxIterationaxes1=plt.subplot(211)axes1.plot(X,Y,color = 'blue',linewidth =1,linestyle='-',label="learn_line")plt.legend()axes2=plt.subplot(212)plt.ylim(0.5,5)#设置坐标显示范围axes2.plot(X,Z,color = 'red',linewidth =1,linestyle='-',label="R_line")plt.legend()  #使label显示出来plt.show()

这里写图片描述

4.聚类过程
1)接受输入:首先计算本次迭代的学习率和学习半径,并从训练集中随机选取一个样本。
2)寻找获胜节点:计算数据集中其他样本与此样本的距离,从中找到点积最小的获胜节点。
那么如何寻找获胜神经元?[2]首先,对网络当前输入模式向量X和竞争层中各神经元对应的权重向量Wj(对应j神经元)全部进行归一化,使得X和Wj模为1;当网络得到一个输入模式向量X时,竞争层的所有神经元对应的权重向量均与其进行相似性比较,并将最相似的权重向量判为竞争获胜神经元。前面刚说过,归一化后,相似度最大就是内积最大:
3)计算优胜领域:根据这两个节点计算出聚类的领域,并找出此领域中的所有节点。
4)调整权值:根据学习率、样本数据调整权重。
5)根据计算的结果,为数据集分配类别标签。
6)评估结果:SOM网络属于无监督聚类,输出的结果就是聚类后的标签。如果训练集已经被分好类,即具有分类标签,那么通过新旧标签的比较就可以反映聚类结果的准确度。

参考:
1.http://blog.csdn.net/you_are_my_dream/article/details/53441141
2.http://blog.csdn.net/zdy0_2004/article/details/50858864(这个写的比较好)
3.https://wenku.baidu.com/view/42df9e1c59eef8c75fbfb3b8.html(SOM基础,过程可以参考)
http://blog.csdn.net/richard2357/article/details/16882929

阅读全文
0 0
原创粉丝点击