原文链接:http://tecdat.cn/?p=18726
原文出处:拓端数据部落公众号
_自组织_映射神经网络(SOM)是一种无监督的数据可视化技术,可用于可视化低维(通常为2维)示意模式的高维数据集。在本文中,咱们钻研了如何应用R创立用于客户细分的SOM。
SOM由1982年在芬兰的Teuvo Kohonen首次形容,而Kohonen在该畛域的工作使他成为世界上被援用最多的芬兰科学家。通常,SOM的可视化是六边形节点的黑白2D图。
SOM
SOM可视化由多个“节点”组成。每个节点向量具备:
- 在SOM网格上的地位
- 与输出空间维度雷同的权重向量。(例如,如果您的输出数据代表人,则可能具备变量“年龄”,“性别”,“身高”和“体重”,网格上的每个节点也将具备这些变量的值)
- 输出数据中的关联样本。输出空间中的每个样本都“映射”或“链接”到网格上的节点。一个节点能够代表多个输出样本。
SOM的要害特色是原始输出数据的拓扑特色保留在图上。这意味着将类似的输出样本(其中相似性是依据输出变量(年龄,性别,身高,体重)定义的)一起搁置在SOM网格上。例如,所有高度大概为1.6m的55岁女性将被映射到网格同一区域中的节点。思考到所有变量,身材矮小的人将被映射到其余中央。在身材上,高个的男性比小个的胖男性更靠近高个头的女性,因为他们“类似”得多。
SOM热图
典型的SOM可视化是“热图”。热图显示了变量在SOM中的散布。现实状况下,类似年龄的人应该汇集在同一地区。
下图应用两个热图阐明均匀教育程度和失业率之间的关系。
SOM算法
从样本数据集生成SOM的算法可总结如下:
- 抉择地图的大小和类型。形态能够是六边形或正方形,具体取决于所需节点的形态。通常,最好应用六边形网格,因为每个节点都具备6个近邻 。
- 随机初始化所有节点权重向量。
- 从训练数据中抉择一个随机数据点,并将其出现给SOM。
- 在地图上找到“最佳匹配单位”(BMU)–最类似的节点。应用欧几里德间隔公式计算类似度。
- 确定BMU“街坊”内的节点。
–邻域的大小随每次迭代而减小。 - 所选数据点调整BMU邻域中节点的权重。
–学习率随着每次迭代而升高。
–调整幅度与节点与BMU的靠近水平成正比。 - 反复步骤2-5,进行N次迭代/收敛。
R中的SOM
训练
R能够创立SOM和可视化。
# 在R中创立自组织映射# 创立训练数据集(行是样本,列是变量# 在这里,我抉择“数据”中可用的变量子集data_train <- data\[, c(3,4,5,8)\]#将带有训练数据的数据框更改为矩阵#同时对所有变量进行标准化 #SOM训练过程。data\_train\_matrix <- as.matrix(scale(data_train))#创立SOM网格 #在训练SOM之前先训练网格 grid(xdim = 20, ydim=20, topo="hexagonal")#最初,训练SOM,迭代次数选项,#学习率model <- som(data\_train\_matrix)
可视化
可视化能够检察生成SOM的品质,并摸索数据集中变量之间的关系。
训练过程:
随着SOM训练迭代的进行,从每个节点的权重到该节点示意的样本的间隔将减小。现实状况下,该间隔应达到最小。此图选项显示了随着工夫的进度。如果曲线一直减小,则须要更多的迭代。#SOM的训练进度plot(model, type="changes")
节点计数
咱们能够可视化映射到地图上每个节点的样本数。此度量能够用作图品质的度量-现实状况下,样本分布绝对平均。抉择图大小时,每个节点至多要有5-10个样本。#节点数plot(model, type="count")
街坊间隔
通常称为“ U矩阵”,此可视化示意每个节点与其街坊之间的间隔。通常应用灰度查看,街坊间隔低的区域示意类似的节点组。间隔较大的区域示意节点相异得多。U矩阵可用于辨认SOM映射内的类别。# U-matrix 可视化
代码/权重向量
节点权重向量由用于生成SOM的原始变量值。每个节点的权重向量代表/类似于映射到该节点的样本。通过可视化整个地图上的权重向量,咱们能够看到样本和变量散布中的模型。权重向量的默认可视化是一个“扇形图”,其中为每个节点显示了权重向量中每个变量的大小的各个扇形示意。# 权重矢量视图
热图
**热**图是兴许是自组织图中最重要的可能的可视化。通常,SOM过程创立多个热图,而后比拟这些热图以辨认图上乏味的区域。 在这种状况下,咱们将SOM的均匀教育程度可视化。```# 热图创立```
应该留神的是,该默认可视化绘制了感兴趣变量的标准化版本。```# 未标准化的热图#定义要绘制的变量 aggregate(as.numeric(data\_train, by=list(som\_model$unit.classi FUN=mean)```值得注意的是,下面的热图显示了失业率与教育程度之间的正比关系。并排显示的其余热图可用于构建不同区域及其特色的图片。 **SOM网格中具备空节点的热图** 在某些状况下,您的SOM训练可能会导致SOM图中的节点为空。通过几行,咱们能够找到som_model $ unit.classif中短少的节点,并将其替换为NA值–此步骤将避免空节点扭曲您的热图。```# 当SOM中有空节点时绘制未标准化的变量var\_unscaled <- aggregate(as.numeric(data\_train\_raw), by=list(som\_model$unit.classif), FUN=mean)# 为未调配的节点增加NA值missingNodes <- which(!(seq(1,nrow(som_model$codes) %in% varunscaled$Node))# 将它们增加到未标准化的数据框var\_unscaled <- rbind(var\_unscaled, data.frame(Node=missingNodes, Value=NA))# 后果数据框var_unscaled # 当初仅应用正确的“值”创立热图。plot(som_model, type =d)```
自组织图的聚类和宰割
能够在SOM节点上执行聚类,以发现具备类似度量的样本组。能够应用kmeans算法并查看“类内平方和之内”图中的“肘点”来确定适合的聚类数预计。
# 查看WCSS的kmeansfor (i in 2:15) {wss\[i\] <- sum(kmeans(mydata, centers=i)$withinss)}# 可视化聚类后果##应用分层聚类对向量进行聚类cutree(hclust(dist(som_model$codes)), 6)# 绘制这些后果:plot(som\_model, t"mappinol =ty\_pal
现实状况下,发现的类别在图外表上是间断的。为了取得间断的聚类,能够应用仅在SOM网格上仅将类似AND的节点组合在一起的档次聚类算法。
将聚类映射回原始样本
当依照下面的代码示例利用聚类算法时,会将聚类调配给 SOM映射上的每个 节点,而不是 数据集中的原始 样本。
# 为每个原始数据样本获取具备聚类值的向量som\_clust\[som\_modl$unit.clasf\]# 为每个原始数据样本获取具备聚类值的向量data$cluster <- cluster_assignment
应用每个聚类中训练变量的统计信息和散布来构建聚类特色的有意义的图片-这既是艺术又是迷信,聚类和可视化过程通常是一个迭代过程。
论断
自组织映射(SOM)是数据迷信中的一个弱小工具。劣势包含:
- 发现客户细分材料的直观办法。
- 绝对简略的算法,易于向非数据科学家解释后果
- 能够将新的数据点映射到经过训练的模型以进行预测。
毛病包含:
- 因为训练数据集是迭代的,因而对于十分大的数据集不足并行化性能
- 很难在二维立体上示意很多变量
- SOM训练须要清理后的,数值的数据,这些数据很难取得。
最受欢迎的见解
1.R语言k-Shape算法股票价格工夫序列聚类
2.R语言中不同类型的聚类办法比拟
3.R语言对用电负荷工夫序列数据进行K-medoids聚类建模和GAM回归
4.r语言鸢尾花iris数据集的档次聚类
5.Python Monte Carlo K-Means聚类实战
6.用R进行网站评论文本开掘聚类
7.用于NLP的Python:应用Keras的多标签文本LSTM神经网络
8.R语言对MNIST数据集剖析 摸索手写数字分类数据
9.R语言基于Keras的小数据集深度学习图像分类