原文链接:http://tecdat.cn/?p=19077
自组织映射 (SOM)是一种工具,通过生成二维表示来可视化高维数据中的模式,在高维结构中显示有意义的模式 ( 点击文末“阅读原文”获取完整代码数据******** )。
导入
通过以下方式使用给定的数据(或数据样本)对SOM进行“训练”:
-
定义了网格的大小。
-
网格中的每个单元都在数据空间中分配了一个初始化向量。
-
例如,如果要创建22维空间的地图,则会为每个网格单元分配一个22维向量。
-
数据被反复输入到模型中进行训练。每次输入训练向量时,都会执行以下过程:
-
识别具有最接近训练向量的代表向量的网格单元。
-
随着训练向量的多次输入,收敛的参数使调整变得越来越小,从而使地图稳定。
该算法赋予SOM的关键特征:数据空间中接近的点在SOM中更接近。因此,SOM可能是表示数据中的空间聚类的好工具。
相关视频
**
拓端
,赞27
Kohonen映射类型
下面的示例将使用2015/16 NBA赛季的球员统计数据。我们将查看每36分钟更新一次的球员统计信息。这些数据可从 http://www.basketball-reference.com/获得。我们已经清理了数据。
NBA <- read.csv("NBA_cleaned.csv",
sep = ",", header = T, check.names = FALSE)
基本SOM
在创建SOM之前,我们需要选择要在其中搜索模式的变量。
colnames(NBA)
## [1] "" "Player" "Pos" "Age" "Tm" "G" "GS"
## [8] "MP" "FG" "FGA" "FG%" "3P" "3PA" "3P%"
## [15] "2P" "2PA" "2P%" "FT" "FTA" "FT%" "ORB"
## [22] "DRB" "TRB" "AST" "STL" "BLK" "TOV" "PF"
## [29] "PTS"
我们从简单示例开始:
som(scale(NBA[res1], grid = somgrid(6, 4, "rectangular")
请注意,我们标准化了训练数据,并定义了网格大小。标准SOM图可为网格单元的代表矢量创建这些饼图表示,其中半径对应于特定维度上的大小。
点击标题查阅往期内容
R语言k-means聚类、层次聚类、主成分(PCA)降维及可视化分析鸢尾花iris数据集
左右滑动查看更多
01
02
03
04
热图SOM
我们可以通过将每个球员分配到具有最接近该球员状态的代表向量来识别地图。“计数”类型的SOM根据球员数量创建了一个热图。
# 色带
colors <- function(n, alpha = 1) {
rev(heat.colors(n, alpha))
}
绘图点
您可以使用“映射”类型的SOM将球员绘制为网格上的点。我们与常规SOM进行可视化比较。
每个地图单元格的代表性矢量显示在右侧。左侧是根据其状态与这些代表向量的接近程度绘制的球员图表。
环形SOM
下一个示例是一种更改几何形状的方法。在为上述示例训练SOM时,我们使用了矩形网格。由于边缘(尤其是拐角处)的单元比内部单元具有更少的邻居,因此倾向于将更多的极端值推到边缘。
par(mfrow = c(1, 2))plot(NBA.SOM2, type = "mapping", pchs = 20, main = "Mapping Type SOM")plot(NBA.SOM2, main = "Default SOM Plot")
映射距离
当用绘制时 type = "dist.neighbours"
,单元格将根据与它们最近的邻居的距离着色,这使我们可以直观地看到高维空间中不同要素之间的距离。
plot(SOM2, type = "dist.neighbours")
有监督SOM
有监督的SOM使我们可以进行分类。到目前为止,我们仅将三维数据映射到二维。当我们处理更高维度的数据时,SOM的实用性变得更加明显,因此让我们使用扩展的球员统计信息列表来做这个受监督的示例:
我们创建有监督的SOM,并根据球员在球场上的位置对其进行分类。我们将数据随机分为训练集和测试集。
indices <- sample(nrow(NBA), 200)
training <- scale(NBA[indices, NBA.measures2])
testing <- scale(NBA[-indices, NBA.measures2], center = attr(training,
"scaled:center"), scale = attr(training, "scaled:scale"))
请注意,当我们重新标准化测试数据时,我们需要根据训练数据的方式对其进行标准化。
您可以在训练算法中对训练变量(NBA.training
)与预测变量(NBA$Pos
)进行加权。现在让我们检查预测的准确性:
##
## Center Point Guard Power Forward Shooting Guard
## Center 16 0 26 1## Point Guard 0 49 0 12## Power Forward 10 1 29 5## Shooting Guard 0 8 4 38## Small Forward 0 0 15 9##
## Small Forward
## Center 4## Point Guard 11## Power Forward 8## Shooting Guard 19## Small Forward 38
可视化预测:
这次,我们使用xweight
参数为权重衡量球员统计数据 。
使用type = "codes"
我们进行绘制,可以 得到标准的可视化球员状态(Codes X
)和球员位置预测(Codes Y
)。
add.cluster.boundaries(NBA.SOM4, NBA.SOM4.hc)
该视图使我们可以将球员统计数据与位置预测进行比较。
可视化预测:自定义SOM
在最后一个示例中,我们将对该type = mapping
图进行一些自定义, 以便我们可以同时表示实际球员位置和SOM的预测位置。我们将从可视化开始。
背景颜色绘制的球员点的背景代表其真实位置。
bg.pallet <- c("red", "blue", "yellow", "purple", "green")
# 为所有单元格制作仅背景颜色的矢量
base.color.vector <- bg.pallet[match(position.predictions, levels(NBA$Pos))]
# 设置alpha以最大的预测置信度标准化max.conf <- apply(NBA.SOM4$codes$Y, 1, max)
点击文末 “阅读原文”
获取全文完整资料。
本文选自《R语言中的SOM(自组织映射神经网络)对NBA球员聚类分析》。
点击标题查阅往期内容
Python用RNN神经网络:LSTM、GRU、回归和ARIMA对COVID19新冠疫情人数时间序列预测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神经网络分类
对用电负荷时间序列数据进行K-medoids聚类建模和GAM回归
R语言有限混合模型(FMM,finite mixture model)EM算法聚类分析间歇泉喷发时间
R语言k-Shape时间序列聚类方法对股票价格时间序列聚类
Python主题建模LDA模型、t-SNE 降维聚类、词云可视化文本挖掘新闻组数据集
R语言用关联规则和聚类模型挖掘处方数据探索药物配伍中的规律
K-means和层次聚类分析癌细胞系微阵列数据和树状图可视化比较
KMEANS均值聚类和层次聚类:亚洲国家地区生活幸福质量异同可视化分析和选择最佳聚类数
PYTHON实现谱聚类算法和改变聚类簇数结果可视化比较
有限混合模型聚类FMM、广义线性回归模型GLM混合应用分析威士忌市场和研究专利申请数据
R语言多维数据层次聚类散点图矩阵、配对图、平行坐标图、树状图可视化城市宏观经济指标数据
r语言有限正态混合模型EM算法的分层聚类、分类和密度估计及可视化
Python Monte Carlo K-Means聚类实战研究
R语言k-Shape时间序列聚类方法对股票价格时间序列聚类
R语言对用电负荷时间序列数据进行K-medoids聚类建模和GAM回归
R语言谱聚类、K-MEANS聚类分析非线性环状数据比较
R语言实现k-means聚类优化的分层抽样(Stratified Sampling)分析各市镇的人口
R语言聚类有效性:确定最优聚类数分析IRIS鸢尾花数据和可视化Python、R对小说进行文本挖掘和层次聚类可视化分析案例
R语言k-means聚类、层次聚类、主成分(PCA)降维及可视化分析鸢尾花iris数据集
R语言有限混合模型(FMM,finite mixture model)EM算法聚类分析间歇泉喷发时间
R语言用温度对城市层次聚类、kmean聚类、主成分分析和Voronoi图可视化
R语言k-Shape时间序列聚类方法对股票价格时间序列聚类
R语言中的SOM(自组织映射神经网络)对NBA球员聚类分析
R语言复杂网络分析:聚类(社区检测)和可视化
R语言中的划分聚类模型
基于模型的聚类和R语言中的高斯混合模型
r语言聚类分析:k-means和层次聚类
SAS用K-Means 聚类最优k值的选取和分析
用R语言进行网站评论文本挖掘聚类
基于LDA主题模型聚类的商品评论文本挖掘
R语言鸢尾花iris数据集的层次聚类分析
R语言对用电负荷时间序列数据进行K-medoids聚类建模和GAM回归
R语言聚类算法的应用实例