8

データセット内のクラスター数の決定に関するウィキペディアの記事は、階層的クラスタリングを使用する場合、このような問題について心配する必要がないことを示しています。ただし、scikit-learn の 凝集クラスタリングを使用しようとすると、「n_clusters」パラメーターとしてクラスターの数を入力する必要があることがわかりました。これがないと、ハードコードされたデフォルトの 2 つのクラスターが得られます。この場合、データセットに適切な数のクラスターを選択するにはどうすればよいですか? ウィキの記事は間違っていますか?

4

2 に答える 2

6

ウィキペディアは、実生活とは何の関係もない極端な単純化を行っているだけです。階層的クラスタリングは、クラスター数の問題を回避しません簡単に言えば、すべてのサンプルにまたがるツリーを構築し、どのサンプル (後でクラスター) が結合してより大きなクラスターを作成するかを示します。これは、データセット全体にマージされるクラスターが 2 つだけになるまで再帰的に発生しました (これがクラスターのデフォルト数が 2 である理由です)。実際のクラスタリングを取得するために、ツリーを「切断」する必要があります。AgglomerativeClustering に適合したら、ツリー全体をトラバースして、保持するクラスターを分析できます。

import numpy as np
from sklearn.cluster import AgglomerativeClustering
import itertools

X = np.concatenate([np.random.randn(3, 10), np.random.randn(2, 10) + 100])
clustering = AgglomerativeClustering()
clustering.fit(X)

[{'node_id': next(itertools.count(X.shape[0])), 'left': x[0], 'right':x[1]} for x in clustering.children_]
于 2015-08-26T10:11:22.720 に答える
0

ELKI (scikit-learn ではなく Java) には、階層クラスタリングからクラスターを抽出する高度なメソッドが多数あります。特定の高さで木を切るよりもスマートですが、たとえば、最小サイズのクラスターの階層を生成できます。

これらの方法が機能するかどうかを確認できます。

于 2015-08-26T13:15:01.133 に答える