自组织映射(Self-Organizing Maps, SOM)是一种神经网络算法,可以用于聚类分析,由芬兰学者Kohonen提出,在R语言中对应的工具包是kohonen

最初看到这种方法,是在International Journal of Health Geographics杂志的一篇论文中:

Crespo, R., Alvarez, C., Hernandez, I. et al. A spatially explicit analysis of chronic diseases in small areas: a case study of diabetes in Santiago, Chile. Int J Health Geogr 19, 24 (2020). https://doi.org/10.1186/s12942-020-00217-1

聚类的效果如下:

1 SOM()函数

kohonen工具包的核心函数有三个:

  • som()

  • xyf()

  • supersom()

本篇主要介绍som()函数,它实现的是单层SOM算法。函数的语法结构如下:

som(X, grid = somgrid(), rlen = 100,...)
  • X:输入数据,数据结构必须为矩阵,并按列进行标准化;

  • grid:神经网络结构;由somgrid()函数指定;

  • rlen:迭代次数。

somgrid()函数的语法结构如下:

somgrid(xdim = 8, ydim = 6,topo = c("rectangular", "hexagonal"),neighbourhood.fct = c("bubble", "gaussian"),toroidal = FALSE)
  • xdim、ydim:列数、行数;

  • topo:网络排列形状;上面提及到的文献使用的就是“六边形”(hexagonal)。

library(kohonen)
data = mtcars
X = subset(data, select = c(mpg, hp, drat, wt, qsec))
X <- as.matrix(scale(X))model.som <- som(X = X, grid = somgrid(4,4, "hexagonal"),rlen = 20000)
  • somgrid(4,4, "hexagonal")表示按六边形将神经网络单元排成4列、4行,共计16个单元。

2 plot.kohonen

展示SOM算法的结果一般使用plot()函数。经过改装后,plot()函数的type参数有如下几个选项:

plot(x, type = c("codes", "changes", "counts","dist.neighbours", "mapping","property", "quality"),...)

默认情况下下,type = "code"

plot(model.som)

type = "change"输出迭代过程:

plot(model.som, type = "change")

type = "count"输出每个神经单元分配到的样本数:

plot(model.som, type = "count")

type参数每个取值的含义具体可参见kohonen工具包中plot.kohonen的说明文档。

3 聚类

som()函数输出的神经网络单元对象,可以使用系统聚类的函数对其进行聚类。单元之间的距离使用object.distances()函数进行刻度。

如将原先的16个神经网络单元根据系统聚类法分为5类:

som.hc <- cutree(hclust(object.distances(model.som, "codes")), 5)
plot(model.som)
add.cluster.boundaries(model.som, som.hc)

如果想查看样本的归属,首先需查看model.som中的unit.classif,对应的是每个样本所在的神经单元编码,再查看som.hc,对应的是每个单元所在的聚类。

model.som$unit.classif
##  [1]  2  2  6 14 16 14  8  9 13  7  7 11 11 11 12 12 12  5  1  5  9 15 15  4 16
## [26]  5  1  1  4  3  4  6som.hc
##  [1] 1 2 2 3 1 2 2 3 2 2 2 4 5 2 2 2

相关阅读

  • stats | 聚类分析之系统聚类法

kohonen | SOM:自组织映射聚类法(1)相关推荐

  1. k均值聚类图像分割matlab代码_用K均值聚类法为人类拍摄的首张黑洞照片进行分割...

    众所周知,人类最近拍摄了首张黑洞照片.网友们纷纷表示,这明明就是一个甜甜圈嘛!以前以为黑洞是这个世界上最最高冷的存在,而此刻突然现出真身,形象却是如此的人畜无害!不但如此,还勾起了网友的食欲!简直是罪 ...

  2. 机器学习特征工程之连续变量离散化:聚类法进行分箱

    机器学习特征工程之连续变量离散化:聚类法进行分箱 离散化,就是把无限空间中有限的个体映射到有限的空间中: 根据用户的听音乐的数据来预测哪些歌曲更受欢迎. 假设大部分人听歌都很平均,会不停的听新的歌曲, ...

  3. spss聚类分析_SPSS聚类分析 I K均值聚类法案例实操

    - 点击上方"中国统计网"订阅我吧!- 文末领取医疗行业报告 今天想写一下聚类分析方法之一:K-Mean聚类法 01聚类分析模型简介 (1)聚类分析没有过多的统计理论支持,也没有统 ...

  4. 电气:蒙特卡洛1000个风光场景并通过削减法|聚类法得到几个典型场景(matlab\python实现)

    个人电气目录传送门:学好电气全靠它,个人电气博文目录(持续更新中-)     本文内容包括22页(代码和一些自己对风光的观点) 提示:专栏解锁后,可以查看该专栏所有文章,划算. 文章目录 一.理论依据 ...

  5. 统计聚类法的基本步骤:

    统计聚类法的基本步骤: 1>形成数据框 2>计算距离阵 计算n个样品两两间的距离D. 3>进行系统聚类 (I)构造n个类,每个类只包含一个样品; (2)合并距离最近的两类为一新类; ...

  6. 系统(层次)聚类法及Spss实现

    目录 一.定义 二.思想 三.举例 四.系统聚类法的Spss实现 五.结语 一.定义 系统聚类法(hierarchjcal cluster method)一译"分层聚类法".聚类分 ...

  7. 机器学习——聚类——密度聚类法——DBSCAN

    目录 理论部分 1.1 提出背景 1.2 常见算法 1.3 DBSCAN算法 1.3.1 基本概念 1.3.2 算法流程 1.3.3 参数设置 1.3.3 优点 1.3.4 缺点 1.3.5 可视化结 ...

  8. 机器学习——聚类——距离聚类法——K-means

    目录 理论部分 1.1 聚类概念 1.1.1 定义 1.1.2 与分类的区别 1.2 相似度测量 1.2.1 欧式距离 1.2.2 马氏距离 1.3 聚类准则 1.3.1 试探方法 1.3.2 聚类准 ...

  9. 机器学习使用兰氏距离的最小距离聚类法以及散点图展示

    最短距离聚类法的原理 相信大家都应该明白聚类算法的含义,所谓的最短距离聚类法,就是在给出n个距离中心的情况下分别将文本中的待训练数据和他们通过某种方式进行计算距离,这里是兰氏距离,当然也可以是欧式距离 ...

最新文章

  1. python的沙盒环境virtualenv(二)--简单使用
  2. 硬编码学习笔记(一)—— 经典定长指令
  3. SQL2K数据库开发二十二之索引操作在视图上创建索引
  4. 软考安全工程师历年真题汇总
  5. SVG与CSS的特殊性
  6. 基于JAVA+SpringBoot+Mybatis+MYSQL的美食分享网站
  7. conda加入pytorch清华源
  8. Pandas系列(七)Pandas数据排序
  9. dos初始操作和全屏方法
  10. pytorch加载模型报错RuntimeError: Error(s) in loading state_dict for ResNet:Missing key(s) in stat
  11. 大型分布式网站术语分析
  12. KETTLE-JDBC连接池参数介绍以及使用
  13. python中数据结构的基本定义
  14. 通过调用ffmpeg来将mp3和jpg合并为mp4视频-批处理。
  15. 2018年12月8日国际项目经理PMP培训考试报名中
  16. 分布式网页爬虫系统 设计和实现
  17. Category 的理解
  18. 大数据学习之路(转载)
  19. 微信每日推送天气预报每日情话-利用堡塔实现每天自动推送!
  20. 【下载】【you-get】用电脑下载网页视频

热门文章

  1. Docker学习总结(36)——利用Google开源Java容器化工具Jib构建镜像
  2. Linux学习总结(27)——CentOS7及以上系统的systemctl命令使用介绍
  3. Quartz学习总结(1)——Spring集成Quartz框架
  4. Maven学习总结(16)——深入理解maven生命周期和插件
  5. php小小通讯录,2009年小学信息技术优质课一等奖教学设计四上《小小通讯录》...
  6. 浅谈API测试与UI Auomation一点心得
  7. 震后十年,他重走那条生死送货线
  8. CSS Box Model 盒子模型
  9. 读懂 SOLID 的「里氏替换」原则
  10. spring3 的restful API RequestMapping介绍