樹状図をどこでカットしますか?


61

階層的なクラスタリングは、樹状図で表すことができます。樹状図を特定のレベルで切断すると、クラスターのセットが得られます。別のレベルでカットすると、クラスターの別のセットが得られます。樹状図をカットする場所をどのように選択しますか?最適なポイントを検討できるものはありますか?樹状図を時間とともに変化させて見た場合、同じポイントでカットする必要がありますか?


私はこの問題についても疑問に思っていますが、(残念ながら)納得できる答えをまだ見つけていません。解決策はないと思います。hopackクラスター数を推定できる(および他の)R / BioCパッケージがありますが、それはあなたの質問に答えません。
suncoolsu

pvclust以下のためのパッケージはR:あなたがグループを識別することができ、樹状図のクラスタのためのブートストラップp値を与える機能を持っているis.titech.ac.jp/~shimo/prog/pvclust
ベン

実際にそれを行う方法についてのいくつかの例に便利なサイト:towardsdatascience.com/...
ミッコ

回答:


46

クラスター分析は本質的に探索的アプローチであるため、決定的な答えはありません。結果の階層構造の解釈はコンテキストに依存し、多くの場合、いくつかの解決策は理論的な観点から同等に優れています。

関連する質問で、いくつかの手がかりが与えられました。実際には、凝集型階層クラスタリングのストップ基準は何ですか?私は通常、視覚的な基準、たとえばシルエットプロット、およびダンの妥当性指数、ヒューバートのガンマ、G2 / G3係数、修正されたランドインデックスなどのある種の数値基準を使用します。基本的に、元の距離行列がクラスター空間でどれだけうまく近似されるかを知りたいので、コフェネティック相関の測定も有用です。また、いくつかの開始値を持つk-meansとギャップ統計量mirror)を使用して、SS内を最小化するクラスターの数を決定します。Ward階層クラスタリングとの一致により、クラスターソリューションの安定性がわかります(使用できますmatchClasses()そのためのe1071パッケージ)。

CRAN Task View Clusterには、pvclustfpcclvなどの有用なリソースがあります。また、試してみる価値があるのはclValidパッケージです(Journal of Statistical Softwareで説明されています)。

クラスターが時間とともに変化する場合、これはもう少し注意が必要です。別のソリューションではなく最初のクラスターソリューションを選択する理由 基盤となるプロセスが時間とともに進化した結果、あるクラスターから別のクラスターに移動する人がいると思いますか?

前の質問で提案されたように、絶対的または相対的な最大オーバーラップを持つクラスターを一致させようとするいくつかの手段があります。クラスタリングの比較-ワーグナーとワーグナーの概要ご覧ください。


12

本当に答えはありません。1からNの間です。

ただし、利益の観点から考えることができます。

たとえば、マーケティングでは、クラスタリングによく似たセグメンテーションを使用します。

各個人に合わせたメッセージ(広告や手紙など)の応答率が最も高くなります。平均に合わせて調整された一般的なメッセージの応答率は最も低くなります。3つのセグメントに合わせた3つのメッセージを言うことは、その中間のどこかになります。これが収益面です。

各個人に合わせたメッセージは、コストが最も高くなります。平均に合わせた一般的なメッセージは、コストが最も低くなります。3つのセグメントに合わせて調整された3つのメッセージは、中間のどこかにあります。

カスタムメッセージを書くためにライターに支払う費用は1000、2つは2000である、などと言います。

1つのメッセージを使用すると、収益は5000になります。顧客を2つのセグメントにセグメント化し、各セグメントに合わせたメッセージを作成した場合、応答率は高くなります。収益は現在7500です。3つのセグメント、わずかに高い応答率、収益は9000です。もう1つのセグメントで、9500です。

利益を最大化するには、セグメント化による限界収益がセグメント化の限界費用と等しくなるまで、セグメント化を続けます。この例では、3つのセグメントを使用して利益を最大化します。

Segments  Revenue  Cost  Profit
1         5000     1000  4000
2         7500     2000  5500
3         9000     3000  6000
4         9500     4000  5500

これは興味深い視点です!
AndyF

5

おそらく最も簡単な方法の1つは、x軸がグループの数であり、y軸が距離または類似度としての評価指標であるグラフィカルな表現です。このプロットでは、通常、2つの区別された領域を観察できます。ラインの「膝」のx軸の値は、クラスターの「最適な」数です。

このタスクで役立つ可能性のある統計もいくつかあります。とりわけ、ヒューバートのガンマ、擬似t²、擬似Fまたはキュービッククラスタリング基準(CCC)です。


私はchlに同意します。クラスター分析は探索的なアプローチであり、結果の解釈は、この特定の場合のクラスターの最適数は、コンテキストに依存します。たとえば、私の仕事では、いくつかの特性に基づいて個人を分類するためにクラスター分析を使用するのが一般的であり、クラスターの数が事前に設定されている場合もあります。この場合、私たちの目的は、異なるクラスターに属する個人を最もよく区別する分類変数のセットを見つけることです。
マヌエルラモン


3

階層的クラスタリングでは、出力パーティションの数は水平カットだけでなく、最終的なクラスタリングを決定する非水平カットでもあります。したがって、これは1.距離メトリック2.リンケージ基準のほかに、3番目の基準として見ることができます。 http://en.wikipedia.org/wiki/Hierarchical_clustering

あなたが言及した基準は、階層内のパーティションのセットに対する一種の最適化制約である第3種です。これはこのペーパーで正式に提示されており、セグメンテーションの例が示されています!

http://www.esiee.fr/~kiranr/ClimbingECCV2012_Preprint.pdf


1

他の答えが言ったように、それは間違いなく主観的であり、あなたが勉強しようとしている粒度の種類に依存しています。一般的なアプローチとして、これをカットして2つのクラスターと1つの外れ値を与えます。次に、2つのクラスターに注目して、それらの間に重要なものがあるかどうかを確認します。

# Init
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()

# Load data
from sklearn.datasets import load_diabetes

# Clustering
from scipy.cluster.hierarchy import dendrogram, fcluster, leaves_list
from scipy.spatial import distance
from fastcluster import linkage # You can use SciPy one too

%matplotlib inline

# Dataset
A_data = load_diabetes().data
DF_diabetes = pd.DataFrame(A_data, columns = ["attr_%d" % j for j in range(A_data.shape[1])])

# Absolute value of correlation matrix, then subtract from 1 for disimilarity
DF_dism = 1 - np.abs(DF_diabetes.corr())

# Compute average linkage
A_dist = distance.squareform(DF_dism.as_matrix())
Z = linkage(A_dist,method="average")

# Dendrogram
D = dendrogram(Z=Z, labels=DF_dism.index, color_threshold=0.7, leaf_font_size=12, leaf_rotation=45)

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.