最近在做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
例子
以下是您将在示例中看到如何生成的一些圖表:
種子地圖

班級配置設定
手寫數字映射
六邊形拓撲
顔色量化
異常值檢測
如何引用 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
確定您的代碼被正确注釋和記錄。每個公共方法都需要記錄為現有方法。