俺とプログラミング

某IT企業でエンジニアをしてます。このブログではプログラミングに関わることを幅広く発信します。

自己組織化マップ(SOM)のPythonライブラリsompyを公開しました

自己組織化マップ(Self Organizing Map: SOM)のライブラリを公開してみたので、インストール、使い方とともに紹介します。Python2.7でnumpy基盤のライブラリです。既存のSOMPYというのもあるのですが、かなり使いにくかったので作りました。まだ至らない部分が多いですが、パッと使いたい時などにどうぞ。


SOMとは

自己組織化マップ(SOM)とは人工ニューラルネットの一種で、高次元データを低次元に落とし、教師なし学習でクラスタリングすることができます。これが自己組織化と言われる理由です。SOMは、データの分類,視覚化などを得意としています。詳しくは以下のリンクなどをご覧ください。

インストール

  • Pythonのバージョン: Python 2.7

インストールはpipに登録したので、簡単です。

sudo pip install sompy

使い方

使い方は以下のデモを参照ください。

import numpy as np
import matplotlib.pyplot as plt
# SOMクラスをインポート
from sompy import SOM 

# 入力ベクトルを設定
input_data = np.random.rand(1000, 3)

# 出力するマップのサイズと次元数を定義、ここでは二次元マップ
output_shape = (40, 40)

# 出力サイズと入力ベクトルを設定
som = SOM(output_shape, input_data)

# SOMのパラメータを設定(neighborは近傍の比率:初期値0.25、learning_rateは学習率:初期値0.1)
som.set_parameter(neighbor=0.26, learning_rate=0.22)
 
# 学習と出力マップの取得。引数は学習ループの回数
output_map = som.train(10000)

plt.imshow(output_map, interpolation='none')
plt.show()

実行結果

f:id:ttlg:20160920174240p:plain

コントリビュータ募集

Batch-Learning SOM(BL-SOM)の実装ができていないので、どなたかよかったら実装よろしくお願いいたします。

ちなみにBatch-Learning SOMとは、データの入力順に左右されないように、SOMを一気に学習するスタイルのものです。
実装は大幅に変更しても全然大丈夫です。また、別のライブラリとして公開して頂いてもかまいません。興味のある方は是非。

Copyright © 2016 ttlg All Rights Reserved.