关于数据挖掘:使用自组织映射神经网络SOM进行客户细分附代码数据

31次阅读

共计 4544 个字符,预计需要花费 12 分钟才能阅读完成。

全文下载链接: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 的 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)是数据迷信中的一个弱小工具。劣势包含:

  • 发现客户细分材料的直观办法。
  • 绝对简略的算法,易于向非数据科学家解释后果
  • 能够将新的数据点映射到经过训练的模型以进行预测。

毛病包含:

  • 因为训练数据集是迭代的,因而对于十分大的数据集不足并行化性能
  • 很难在二维立体上示意很多变量
  • 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 语言中的高斯混合模型

正文完
 0