统计学习方法 -无监督学习(三)

3 自组织映射

目录

3 自组织映射

一 引言

二 关于自组织映射简单入门那些事


一 引言

自组织映射是一种基于拓扑表示法的数据降维技术

二 关于自组织映射简单入门那些事

        自组织映射算法需要反复迭代一些简单的操作,在目标数据很小时,自组织映射与k均值聚类非常相似;在目标数据集较大时,自组织映射就会用一种强大的方式展现复杂数据集的拓扑结构

        自组织映射是由许多节点构成的网络(一般是矩形或者六边形),每个节点都包含一个权重向量,该权重向量的维度与输入数据集相同,节点可以随机初始化,但是与数据集分布大致相似的初始化能使算法训练的更快,算法会随着观测值的输入而迭代

  • 找出现有配置下的激活节点,也就是最佳匹配单元(BMU),通过度量输入向量与所有权向量间的欧几里得距离,可以决定BMU
  • 根据输入向量调整BMU(将BMU向输入向量移动)
  • 通常以较小量调整临近节点,临近节点调整的幅度由邻域函数决定

        该过程会重复很多次,并运用合适的取样方法,直到网络收敛(当新输入项增加时,损失无法进一步降低)

        输入数据集的拓扑结构可以用一个低维映射来存储并进行可视化

学习率 = 学习率 /(1 + 0.5 * t) # t为迭代指数  

import numpy as np
from sklearn. datasets import load_ digits
from som import Som
from pylab import plot, axis, show,pcolor, colorbar, bone
digits=load_digits()
data= dfgits.data
labels= digits target

som=som(16,16,64, sigma=1.0 learning_rate=0.5
som. random_weights_init (data)
print(Initiating SOM.)
som. train_random(data, 10000)
bone()
print ("\n. SOM Processing Complete")
pcolor(som. distance_map() .T)
colorbar()

        这里我们使用了 Sompy文件中定义的m类,该类包含了我们用来实现自组织映射算法的方法。我们将提供映射的维度(经过一系列尝试后,本例将16×16作为网格规模,因为这样的网格规模能够给特征映射留有充足的延伸空间,即使仍可能存在一些簇间的重叠)和输入数据的维度(用来确定自组织映射节点的权重向量的维度作为函数的参数,同时提供 sigma值和学习率本例中的 sigma定义了邻域函数的覆盖范围如前文所述,我们使用的是高斯邻域函数。最恰当的 sigma值与网格规模有关。对8×8的网格来说, sigma的值一般取1.0,而本例16×16的网格对应的最佳 sigma值为1.3。sigma取值不恰当是很容易发 sigma现的。当过小时,数据点会在网格的中心聚集;当 sigma过大时,网格中心就会出现若干较大空白。

        接下来给每个定义标签并分配颜色,以便在自组织映射图像中区分他们,然后遍历每个数据点,每次迭代,都要根据自映射算法的计算结果标出表明类的BMU,自组织映射结束迭代时,需要添加U矩阵(一种表示相对观测密度的颜色矩阵)作为一个单色图层

labels[kabels == '0'] = 0
labels[kabels == '1'] = 1
labels[kabels == '2'] = 2
labels[kabels == '3'] = 3
labels[kabels == '4'] = 4
labels[kabels == '5'] = 5
labels[kabels == '6'] = 6
labels[kabels == '7'] = 7
labels[kabels == '8'] = 8
labels[kabels == '9'] = 9

markers = ['o','v','1','3','8','s','p','x','D','*']
colors ["r","g","b","y","c",(0,0.1,0.8),(1,0.5,0),(1,1,0.3),(0.4,0.6,0)]
for cnt, xx in enumerate(data):
    w =som. winner (xx)
    plot(w[0].5,w[1]+.5,markers [1abels[cnt]],
         markerfacecolor='None', markeredgecolorcolors [labels(cnt]],
         markersize=12, markeredgewidth=2)
    axis([0,som. weights.shape[0],0, som.weights.shape [1]])
    show()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OR_0295

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值