原文链接:http://tecdat.cn/?p=19077

原文出处:拓端数据部落公众号

导入

自组织映射 (SOM)是一种工具,通过生成二维示意来可视化高维数据中的模式,在高维构造中显示有意义的模式。通过以下形式应用给定的数据(或数据样本)对SOM进行“训练”:

  • 定义了网格的大小。

  • 网格中的每个单元都在数据空间中调配了一个初始化向量。

  • 例如,如果要创立22维空间的地图,则会为每个网格单元调配一个22维向量。

  • 数据被重复输出到模型中进行训练。每次输出训练向量时,都会执行以下过程:

  • 辨认具备最靠近训练向量的代表向量的网格单元。

  • 随着训练向量的屡次输出,收敛的参数使调整变得越来越小,从而使地图稳固。

该算法赋予SOM的要害特色:数据空间中靠近的点在SOM中更靠近。因而,SOM可能是示意数据中的空间聚类的好工具。

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图可为网格单元的代表矢量创立这些饼图示意,其中半径对应于特定维度上的大小。

热图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)

最受欢迎的见解

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的小数据集深度学习图像分类