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

简介: 自组织映射(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

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

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

如何使用它

为了使用 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

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


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)

并且可以如下加载

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

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


探索参数

您可以使用此仪表板来探索参数对示例数据集的影响:

https : //share.streamlit.io/justglowing/minisom/dashboard/dashboard.py


例子

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


种子地图


image.png

image.png

班级分配

image.png

手写数字映射

image.png

六边形拓扑

image.png

颜色量化

image.png

异常值检测

image.png

如何引用 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


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


相关文章
|
6月前
|
Python 缓存
Python ChainMap:链式映射的妙用与实战解析
【4月更文挑战第1天】Python中的`collections`模块提供了一个名为`ChainMap`的类,它实现了多个字典的链式查找。`ChainMap`将多个字典组织成一个逻辑上的单一字典,允许你像操作单个字典一样来访问这些字典。当在`ChainMap`中查找一个键时,它会按照字典被添加的顺序从前向后依次查找,直到找到匹配的键为止。如果找不到,就会抛出`KeyError`。
|
2月前
|
Python
python第三方库-字符串编码工具 chardet 的使用(python3经典编程案例)
这篇文章介绍了如何使用Python的第三方库chardet来检测字符串的编码类型,包括ASCII、GBK、UTF-8和日文编码的检测示例。
127 6
|
2月前
|
SQL 缓存 数据库
构建高效Web应用:掌握Python中的ORM映射技术
在Web开发中,数据库操作至关重要,但直接编写SQL语句会增加代码复杂度并降低效率。对象关系映射(ORM)技术通过将对象模型映射为数据库表,使开发者能以面向对象的方式处理数据,提升开发效率和代码可维护性。本文以Python和SQLAlchemy为例,介绍ORM的基本概念、安装方法及使用技巧,并展示其在提升Web应用性能方面的优势。通过ORM,开发者可以简化数据库操作,专注于业务逻辑实现,提高开发效率和代码质量。
51 1
|
1月前
|
自然语言处理 搜索推荐 程序员
【Python】如何使用pip,安装第三方库和生成二维码、操作Excel
【Python】如何使用pip,安装第三方库和生成二维码、操作Excel
42 0
|
6月前
|
Python
pip批量安装python第三方库
pip批量安装python第三方库
|
3月前
|
Python Windows
Python安装第三方库太慢?配置好这个速度飞起
Python安装第三方库太慢?配置好这个速度飞起
|
3月前
|
Shell Python 容器
Python模块是其代码组织和重用的基本方式。
【8月更文挑战第18天】Python模块是其代码组织和重用的基本方式。
34 1
|
3月前
|
Linux Python
Linux离线安装Python第三方库Requests
本文介绍了在无法连接外网的Linux服务器上离线安装Python第三方库Requests的过程,包括下载依赖包、解决依赖问题并成功安装的步骤。
460 0
|
4月前
|
SQL 缓存 数据库
构建高效Web应用:掌握Python中的ORM映射技术
【7月更文挑战第21天】在Web开发中,数据库操作常需直接写SQL,增加复杂度与风险。ORM技术,如SQLAlchemy,通过对象关系映射简化此流程,提升效率与安全性。安装SQLAlchemy仅需`pip install sqlalchemy`,使用时定义模型映射至数据库表,通过会话对象管理事务。ORM特性如缓存、延迟加载及批量操作显著优化Web性能,减少数据库负担。掌握SQLAlchemy,开发者可聚焦业务逻辑,提升应用效能与代码质量。
46 0
|
6月前
|
Python
2024年最新【Python】程序的组织结构:顺序结构,2024年最新46道面试题带你了解中高级Python面试
2024年最新【Python】程序的组织结构:顺序结构,2024年最新46道面试题带你了解中高级Python面试
2024年最新【Python】程序的组织结构:顺序结构,2024年最新46道面试题带你了解中高级Python面试