自组织映射(SOM)聚类分析Python第三方库实现<minisom>

举报
府学路18号车神 发表于 2021/12/25 00:23:14 2021/12/25
【摘要】 最近在做SOM神经网络模型的项目,之前一直在用Matlab的工具箱,一直想转成Python的代码来实现,就到处找,结果还真有SOM相关的库。 自组织神经网络(SOM)的Python第三方库minisom...

最近在做SOM神经网络模型的项目,之前一直在用Matlab的工具箱,一直想转成Python的代码来实现,就到处找,结果还真有SOM相关的库。

自组织神经网络(SOM)的Python第三方库minisom代码示例

自组织神经网络(SOM)的Python第三方库minisom源代码实现

自组织神经网络(SOM)的Python第三方库minisom聚类功能实现

自组织神经网络(SOM)的Python第三方库minisom分类功能实现


自组织地图

MiniSom 是自组织映射 (SOM) 的简约和基于 Numpy 的实现。SOM 是一种人工神经网络,能够将高维数据项之间复杂的非线性统计关系转换为低维显示器上的简单几何关系。Minisom 旨在让研究人员能够轻松地在其基础上进行构建,并让学生能够快速掌握其细节。

关于 MiniSom 的更新发布在Twitter 上

安装

只需使用点:

pip install minisom

  
 
  • 1

或将 MiniSom 下载到您选择的目录并使用安装脚本:

git clone https://github.com/JustGlowing/minisom.git
python setup.py install

  
 
  • 1
  • 2

如何使用它

为了使用 MiniSom,您需要将数据组织为 Numpy 矩阵,其中每一行对应一个观察值或如下列表:

data = [[ 0.80 , 0.55 , 0.22 , 0.03 ],
[ 0.82 , 0.50 , 0.23 , 0.03 ],
[ 0.80 , 0.54 , 0.22 , 0.03 ],
[ 0.80 , 0.53 , 0.26 , 0.03 ],
[ 0.79 , 0.56 , 0.22 , 0.03 ],
[ 0.75 , 0.60 , 0.25 , 0.03 ],
[ 0.77 , 0.59 , 0.22 , 0.03 ]]

然后你可以训练 MiniSom 如下:

from minisom import MiniSom    
som = MiniSom(6, 6, 4, sigma=0.3, learning_rate=0.5) # initialization of 6x6 SOM
som.train(data, 100) # trains the SOM with 100 iterations

  
 
  • 1
  • 2
  • 3

您可以按如下方式获得给定样本的地图上获胜神经元的位置:

som.winner(data[0])

有关 minisom 中实现的所有功能的概述,您可以浏览以下示例:
https : //github.com/JustGlowing/minisom/tree/master/examples

导出 SOM 并再次加载

可以使用 pickle 保存模型,如下所示

import pickle
som = MiniSom(7, 7, 4)

# ...train the som here

# saving the som in the file som.p
with open('som.p', 'wb') as outfile:
    pickle.dump(som, outfile)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

并且可以如下加载

with open('som.p', 'rb') as infile:
    som = pickle.load(infile)

  
 
  • 1
  • 2

请注意,如果使用 lambda 函数来定义衰减因子 MiniSom 将不再可选。

探索参数

您可以使用此仪表板来探索参数对示例数据集的影响:
https : //share.streamlit.io/justglowing/minisom/dashboard/dashboard.py

例子

以下是您将在示例中看到如何生成的一些图表:

种子地图
在这里插入图片描述

班级分配
在这里插入图片描述

手写数字映射
在这里插入图片描述

六边形拓扑
在这里插入图片描述

颜色量化

在这里插入图片描述

异常值检测

在这里插入图片描述

如何引用 MiniSom

@misc{vettigliminisom,
title={MiniSom: minimalistic and NumPy-based implementation of the Self Organizing Map},
author={Giuseppe Vettigli},
year={2018},
url={https://github.com/JustGlowing/minisom/},
}

贡献指南

在你的 Pull Request 的描述中清楚地解释它实现/修复了什么以及你的更改。可能在PR的描述中举个例子。如果 PR 与代码加速有关,请报告可重现的示例并量化加速。 为您的拉取请求提供一个有用的标题,总结您的贡献。 为您的代码编写单元测试并确保现有测试是最新的。pytest可用于此:

pytest minisom.py

使用pycodestyle以下方法确保没有风格问题:

pycodestyle minisom.py

确保您的代码被正确注释和记录。每个公共方法都需要记录为现有方法。

"
一切美好的事物都是曲折地接近自己的目标

一切笔直都是骗人的

所有真理都是弯曲的

时间本身就是一个圆圈

"

参考文献:https://github.com/JustGlowing/minisom

【纯·干货】你会用到的论文小助手,不定期持续更新中~

文章来源: blog.csdn.net,作者:府学路18号车神,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_44333889/article/details/118214044

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。