全文下载链接:http://tecdat.cn/?p=18726
最近咱们被客户要求撰写对于自组织映射神经网络(SOM)的钻研报告,包含一些图形和统计输入。
自组织\_映射神经网络(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")
点击题目查阅往期内容
R语言鸢尾花iris数据集的档次聚类分析
左右滑动查看更多
01
02
03
04
街坊间隔\
通常称为“ 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训练须要清理后的,数值的数据,这些数据很难取得。
本文摘选 《 R语言应用自组织映射神经网络(SOM)进行客户细分 》 ,点击“浏览原文”获取全文残缺材料。
点击题目查阅往期内容
R语言中的SOM(自组织映射神经网络)对NBA球员聚类分析\
RNN循环神经网络 、LSTM长短期记忆网络实现工夫序列长期利率预测\
联合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络工夫序列剖析\
深度学习:Keras应用神经网络进行简略文本分类剖析新闻组数据\
用PyTorch机器学习神经网络分类预测银行客户散失模型\
PYTHON用LSTM长短期记忆神经网络的参数优化办法预测工夫序列洗发水销售数据\
Python用Keras神经网络序列模型回归拟合预测、准确度检查和后果可视化\
Python用LSTM长短期记忆神经网络对不稳固降雨量工夫序列进行预测剖析\
R语言中的神经网络预测工夫序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告\
R语言深度学习:用keras神经网络回归模型预测工夫序列数据\
Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类\
R语言KERAS深度学习CNN卷积神经网络分类辨认手写数字图像数据(MNIST)\
MATLAB中用BP神经网络预测人体脂肪百分比数据\
Python中用PyTorch机器学习神经网络分类预测银行客户散失模型\
R语言实现CNN(卷积神经网络)模型进行回归数据分析\
SAS应用鸢尾花(iris)数据集训练人工神经网络(ANN)模型\
【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析\
Python应用神经网络进行简略文本分类\
R语言用神经网络改良Nelson-Siegel模型拟合收益率曲线剖析\
R语言基于递归神经网络RNN的温度工夫序列预测\
R语言神经网络模型预测车辆数量工夫序列\
R语言中的BP神经网络模型剖析学生问题\
matlab应用长短期记忆(LSTM)神经网络对序列数据进行分类\
R语言实现拟合神经网络预测和后果可视化\
用R语言实现神经网络预测股票实例\
应用PYTHON中KERAS的LSTM递归神经网络进行工夫序列预测\
python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译\
用于NLP的Python:应用Keras的多标签文本LSTM神经网络分类Python、R对小说进行文本开掘和档次聚类可视化剖析案例\
R语言简单网络分析:聚类(社区检测)和可视化\
R语言中的划分聚类模型\
基于模型的聚类和R语言中的高斯混合模型\
r语言聚类分析:k-means和档次聚类\
R语言k-Shape工夫序列聚类办法对股票价格工夫序列聚类\
用R语言进行网站评论文本开掘聚类\
基于LDA主题模型聚类的商品评论文本开掘\
R语言中实现档次聚类模型\
R语言鸢尾花iris数据集的档次聚类分析\
R语言对用电负荷工夫序列数据进行K-medoids聚类建模和GAM回归\
基于模型的聚类和R语言中的高斯混合模型