質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

7618閲覧

PythonのSOMライブラリsomocluを使ったクラスタ化について

Terratale

総合スコア21

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/07/20 02:17

前提・実現したいこと

「somoclu」というPythonライブラリを用いて、SOMによる学習およびクラスタ化をしようと思っているですが、
このライブラリでのクラスタ化メソッド「cluster()」を使ったクラスタ化が、果たして「SOMによる分類」と言って良いのかが分かりません。

cluster()メソッドについては下記ページ
http://somoclu.readthedocs.io/en/stable/example.html
の真ん中より少し下辺りに説明があります。

このメソッドは、デフォルトではk-means法による8つのクラスタへの分類、引数指定によりscikit-learnの別のアルゴリズムを使った分類もできると書いてあります。

僕の理解ではSOMはあくまで多次元ベクトルを人間にとって理解しやすい次元へ変換し可視化するものだと思っているため、そこから更に自動的機械的に入力データを分類しようとすると、上記のk-means法など他のノウハウに頼らざるを得ないのかもしれませんが、
それにより得られた結果にはSOMでの学習は作用しているのでしょうか?
このメソッドを用いたk-means法による分類はSOMにより作成したマップを元に行なっているのか、
それともこれは単にk-means法により分類したものをSOMにより見やすくしているだけなのでしょうか?

機械学習については最近勉強し始めたばかりなので、質問内で的はずれなことを言っている箇所もあるかもしれませんが、良ければご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

SOMの各ノードの重みベクトルに基づいてノードをクラスタリングしています。

こんなのを入れてみると納得がいきます。

python

1class MyKM(KMeans): 2 def fit(self, X, *args): 3 print(X.shape) 4 print(X) 5 return super(MyKM, self).fit(X, *args) 6 7... # データの準備とかSOMのインスタンスの生成とか 8som.train(data=X, epochs=1000) 9km = MyKM(n_clusters=3, n_jobs=-1) 10som.cluster(algorithm=km) 11# 出力

たとえば

python

1som = Somoclu(n_rows=12, n_columns=30, 2 initialization="pca", verbose=2)

でirisのデータを入れると、標準出力には

python

1(360, 4) 2[[4.6 3.6 1. 0.2 ] 3 [4.733333 3.5333333 1.2666667 0.23333332] 4 [5. 3.6 1.4 0.2 ] 5 ... 6 [7.6999993 3.7999997 6.7 2.2 ] 7 [7.6999993 2.6 6.9 2.3 ] 8 [7.7 2.6 6.9 2.3 ]]

が出てきました。360=12*30、4次元は入力データの次元数と同じ次元数の重みベクトルになっているからです。ということで、ノードのクラスタリングです。

ここを見てイメージを掴んでおくと更にわかりやすいです。

子供でもわかる「自己組織化マップ」

投稿2018/07/20 03:18

編集2018/07/20 03:20
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Terratale

2018/07/21 04:10

ありがとうございます。迅速かつ、実際のプログラムなどを交えた丁寧な説明のおかげで疑問が解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問