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

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

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

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

Q&A

解決済

1回答

15931閲覧

pythonでのデンドログラムの意味、およびその画質について(クラスター分析)

u_k_statistics

総合スコア44

Python

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

0グッド

1クリップ

投稿2016/10/14 02:02

pdists = pdist(mats_delete) result = linkage(pdists) dendro = dendrogram(result, truncate_mode='lastp') show()

というコードを実行した結果、以下のようなデンドログラムが表示されたのですが、画像の下の方の数字は何を表しているのでしょうか?
単に数字が書かれている場合と、(数字)となっている場合は何が違うのでしょうか?
イメージ説明
また、

pdists = pdist(mats_delete) result = linkage(pdists) dendro = dendrogram(result, p=100, truncate_mode='lastp') show()

イメージ説明

とするとより細かいデンドログラムが図示されるのですが、画質が荒く下にどのような数字が書かれているのか判別がつきません。
高画質でデンドログラムを見る、もしくは下の数字の羅列だけでも見ることができる方法は何かないでしょうか?
よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

単に数字が書かれている場合と、(数字)となっている場合は何が違うのでしょうか?

単に数字が書かれている場合は、ラベルを意味します。括弧付きの場合は、Dendrogram が省略されており、その下に何個のノードが存在しているかを示しています。 p の値を充分に大きくすれば、省略はされず括弧付きの表示はなくなるはずです。

ラベルについては、指定しない場合は単に添字としてインデックスが表示されている状態です。(データにもよりますが)このままでは判別が付かないのでラベルを与えると数字以外で表記されます。

ラベルを指定しない場合

python

1from matplotlib import pyplot as plt 2from scipy.cluster.hierarchy import dendrogram, linkage 3import numpy as np 4 5%matplotlib inline 6 7answer = ([0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 1], [0, 0, 0, 0], [1, 0, 1, 0], [0, 1, 0, 0]) 8 9result = linkage(answer, method='ward') 10dendrogram(result, truncate_mode='lastp') 11plt.show()

ラベルを省略した Dendrogram

ラベルを指定した場合

python

1name = ('Lloyd', 'Collet', 'Refill', 'Kratos', 'Genius', 'Zelos') 2answer = ([0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 1], [0, 0, 0, 0], [1, 0, 1, 0], [0, 1, 0, 0]) 3 4result = linkage(answer, method='ward') 5dendrogram(result, truncate_mode='lastp', labels=name) 6plt.show()

ラベルを指定した Dendrogram

p を小さくした場合

ラベルを指定してかつ p 値を (あえて) 小さくした場合以下のようになります。

python

1name = ('Lloyd', 'Collet', 'Refill', 'Kratos', 'Genius', 'Zelos') 2answer = ([0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 1], [0, 0, 0, 0], [1, 0, 1, 0], [0, 1, 0, 0]) 3 4result = linkage(answer, method='ward') 5dendrogram(result,p=3, truncate_mode='lastp', labels=name) 6plt.show()

p を小さくした場合

小さなラベルの確認方法

画像を大きくして判別する方法

以下のように図のサイズを変更できます。(あまり大きくすると固まるので注意)

python

1plt.figure(figsize=(10, 10))

生データを見る方法

Dendrogram を生成するための情報を直接みてもよいでしょう。

python

1r = dendrogram(result, truncate_mode='lastp', labels=name) 2r["leaves"] 3# => [5, 2, 0, 3, 1, 4] 4 5r["ivl"] 6# => ['Zelos', 'Refill', 'Lloyd', 'Kratos', 'Collet', 'Genius']

投稿2016/10/14 05:03

iktakahiro

総合スコア142

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

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

u_k_statistics

2016/10/15 00:04

iktakahiroさん 回答ありがとうございます。 重ねてお尋ねしたいのですが、show()で出力した画像をpythonのプログラム内で指定したディレクトリに保存することはできないのでしょうか? matplotlib.pyplot.savefig(fname) としても画像が保存できてはいるのですが、真っ白の画像でデンドログラムは保存されていませんでした。 ご存知でしたらよろしくお願い致します。 また、pythonのクラスター分析で、郡内分散や群間分散を出力する方法はありますでしょうか? どの程度のグループに分けるかを決める際に、上から指示されたクラスター数の求め方が、 全個体の平方和に占めるクラスター間の平方和の割合が〇〇以上になった時点のクラスター数 ですので、これは群間分散のことを指していると考え質問させていただきました。 よろしくお願い致します。
iktakahiro

2016/10/15 01:43

あまり画像の保存処理はしないので詳しくないのですが(保存するときはブラウザから保存してしまいます) ``` plt.show() ``` した後では空白画像になると思います。`show()` より前で `savefig()` してみてください。これは `show()` の性質によるものと思います。 郡内分散については今回のトピックとは主旨が異なるので別トピックとして質問されるとよろしいと思います。
u_k_statistics

2016/10/15 07:44

回答ありがとうございます。 別トピックで質問させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問