自组织映射神经网络(SOM)是一种无监督的数据可视化技术,可用于可视化低维(通常为2维)表示形式的高维数据集。在本文中,我们研究了如何使用R创建用于客户细分的SOM。
SOM由1982年在芬兰的Teuvo Kohonen首次描述,而Kohonen在该领域的工作使他成为世界上被引用最多的芬兰科学家。通常,SOM的可视化是六边形节点的彩色2D图。
SOM可视化由多个“节点”组成。每个节点向量具有:
SOM的关键特征是原始输入数据的拓扑特征保留在图上。这意味着将相似的输入样本(其中相似性是根据输入变量(年龄,性别,身高,体重)定义的)一起放置在SOM网格上。例如,所有高度大约为1.6m的55岁女性将被映射到网格同一区域中的节点。考虑到所有变量,身材矮小的人将被映射到其他地方。在身材上,高个的男性比小个的胖男性更接近高个头的女性,因为他们“相似”得多。
典型的SOM可视化是“热图”。热图显示了变量在SOM中的分布。理想情况下,相似年龄的人应该聚集在同一地区。
下图使用两个热图说明平均教育水平和失业率之间的关系。
从样本数据集生成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的训练进度
plot(model, type="changes")
#节点数
plot(model, type="count")
# U-matrix 可视化
# 权重矢量视图
# 热图创建
应该注意的是,该默认可视化绘制了感兴趣变量的标准化版本。
# 未标准化的热图
#定义要绘制的变量
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的kmeans
for (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)是数据科学中的一个强大工具。优势包括:
缺点包括:
最受欢迎的见解
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的小数据集深度学习图像分类