algorithm - 教師あり - 未知数のクラスタを持つ教師なしクラスタリング



教師 なし 学習 本 (2)

私は3次元でベクトルの大きなセットを持っています。 私は、ユークリッド距離に基づいてこれらをクラスタリングする必要があります。その結果、特定のクラスタ内のすべてのベクトルは、ユークリッド距離がお互いにしきい値「T」未満になります。

私はいくつのクラスターが存在するか分からない。 最後に、ユークリッド距離が空間内のベクトルのいずれとも「T」以上であるため、クラスタの一部ではない個々のベクトルが存在する可能性があります。

どのような既存のアルゴリズム/アプローチがここで使用されるべきですか?


moooeeeepの答えは、階層的クラスタリングを使用することを推奨しました。 私はクラスタリングのしきい値をどのように選択するかについて詳しく説明したいと思っていました。

1つの方法は、異なる閾値t1t2t3 、...に基づいてクラスタリングを計算し、次にクラスタリングの「品質」についてのメトリックを計算することである。 前提は、 最適な数のクラスタを有するクラスタリングの品質が、品質メトリックの最大値を有することである。

私が過去に使った良質の指標の一例は、Calinski-Harabaszです。 簡単に説明すると、クラスター間の平均距離を計算し、クラスター内の距離で割ります。 最適なクラスタリングの割り当てには、互いに最も離れたクラスタと、最もタイトなクラスタがあります。

ところで、階層的クラスタリングを使用する必要はありません。 また、 k -meansのようなものを使用して、各kについて事前計算し、次に最も高いCalinski-Harabaszスコアを持つkを選ぶこともできます。

より多くの参照が必要な場合は私に教えてください、私はいくつかの論文のために私のハードディスクを磨くでしょう。


階層的クラスタリングを使用できます。 むしろ基本的なアプローチなので、利用可能な実装がたくさんあります。 これは、例えばPythonのscipy含まれています。

たとえば、次のスクリプトを参照してください。

import matplotlib.pyplot as plt
import numpy
import scipy.cluster.hierarchy as hcluster

# generate 3 clusters of each around 100 points and one orphan point
N=100
data = numpy.random.randn(3*N,2)
data[:N] += 5
data[-N:] += 10
data[-1:] -= 20

# clustering
thresh = 1.5
clusters = hcluster.fclusterdata(data, thresh, criterion="distance")

# plotting
plt.scatter(*numpy.transpose(data), c=clusters)
plt.axis("equal")
title = "threshold: %f, number of clusters: %d" % (thresh, len(set(clusters)))
plt.title(title)
plt.show()

次のような結果が得られます。

パラメータとして与えられる閾値は、ポイント/クラスタが別のクラスタにマージされるかどうかを判断する基準となる距離値である。 使用されている距離メトリックも指定できます。

クラスタ内/クラスタ間の類似度を計算する方法には、最も近い点間の距離、最も遠い点間の距離、クラスタ中心までの距離など、さまざまな方法があることに注意してください。 これらのメソッドの一部は、scipys階層クラスタリングモジュール( 単一/完全/平均...リンケージ )によってもサポートされています。 あなたの記事によると、あなたは完全なリンケージを使いたいと思う。

このアプローチはまた、他のクラスタの類似性基準、すなわち距離閾値を満たさない場合、小さい(単一点)クラスタを可能にすることに留意されたい。

より優れたパフォーマンスを発揮するアルゴリズムが他にもあります。これは、多くのデータポイントがある状況では適切になります。 他の答え/コメントが示唆するように、あなたはDBSCANアルゴリズムを見たいかもしれません:

これらのアルゴリズムやその他のクラスタリングアルゴリズムについては、(Pythonのscikit-learnライブラリの)デモページをご覧ください。

その場所からコピーされた画像:

ご覧のように、各アルゴリズムは、考慮する必要があるクラスタの数と形状についていくつかの仮定を行います。 アルゴリズムによって課せられた暗黙の仮定、またはパラメータ化によって指定された明示的な仮定。





cluster-analysis