コサイン類似度によるクラスタリング


8

大きなデータセットとそれらの間のコサイン類似度があります。予想するクラスターの数を事前に指定する必要なく、類似のオブジェクトをまとめるコサイン類似度を使用してそれらをクラスター化したいと思います。

私はDBSCANとAffinity Propagationのsklearnドキュメントを読みました。どちらも距離行列(コサイン類似度行列ではない)を必要とします。

本当に、私はa)距離メトリックとb)事前に指定された数のクラスターを必要としないアルゴリズムを探しています

誰かがそれを行うアルゴリズムを知っていますか?

回答:


8

まず、すべてのクラスタリングアルゴリズムは、ある種の距離メトリックを使用しています。どのメトリックにも独自のプロパティがあり、さまざまな種類の問題に適しているため、これは実際に重要です。

レコード間にコサイン類似性があると言ったので、これは実際には距離行列です。この行列は、いくつかのクラスタリングアルゴリズムへの入力として使用できます。

ここで、階層的クラスタリングから始めることをお勧めします。定義された数のクラスターを必要とせず、データを入力して距離を選択するか、距離マトリックスを入力できます(距離を何らかの方法で計算します)。

階層的クラスタリングは計算にコストがかかるため、大量のデータがある場合は、サンプルのみから始めることができます。


有用な回答をありがとう。私はこのdatascience.stackexchange.com/questions/20198のような同様の問題を抱えており、それに与えられた答えを使用したいと思います。ただし、重心に最も近い点を見つけるために、最小余弦距離を使用します。コサイン類似度を使用している場合、それは最高のコサイン類似度でしょうか?
Smith Volka、2017

1
距離を単純に類似度に変換できます。AからBまでの距離が0.3の場合、類似度は1-0.3 = 0.7になります。
HonzaB 2017

3

DBSCAN は、距離の代わりに類似度を使用して簡単に実装できます。<=イプシロンを> =イプシロンに変更するだけです。

HACは、 "min"と "max"を入れ替えた場合(少なくとも単一リンク、完全リンク、UPGMA、WPGMA-Wardを使用しない)の類似性でも問題なく機能します(最小ではなく最大の類似性でマージしたい場合)。距離)。

怠惰な場合は、類似点を距離に変換することもできます。最大値が固定されている場合は、dist = max-simで十分です。


答えてくれてありがとう。<=イプシロンから> =イプシロンへのイプシロンによってypuはどういう意味ですか?
Smith Volka

さて、sklearnのepsのデフォルト値は0.5です。この値(0.8など)を増やしても正しいですか。それはあなたが答えで意味したことですか?
Smith

DBSCANは最大イプシロン距離しきい値を使用します。GDBSCANにより、代わりに最小類似度を使用することもできます。パラメータではなく、コードを変更する必要があります。Sklearnは類似性をサポートしていません。ELKIは、GDBSCANの類似関数をを介して直接サポートしていSimilarityNeighborPredicateます。
QUITあり-Anony-Mousse 2017年

コードを記述できない場合は、先ほど触れた「レイジー」アプローチを使用できます。同じ結果が得られるはずです。
QUITあり-Anony-Mousse 2017年

最大値が固定されている場合、dist = max-simはしばしば何をしますか?試してみたいです。
Smith Volka

3

私はsklearnの階層的クラスタリングを使用します

from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from scipy.cluster import  hierarchy

#Vectorizing
X = CountVectorizer().fit_transform(docs)
X = TfidfTransformer().fit_transform(X)
#Clustering
X = X.todense()
threshold = 0.1
Z = hierarchy.linkage(X,"average", metric="cosine")
C = hierarchy.fcluster(Z, threshold, criterion="distance")

Cはドキュメントのクラスタリングですdocs

の代わりに他のメトリックcosineを使用し、よりも異なるしきい値を使用できます0.1


"docs"は元のデータマトリックスですか?データ行列をどこに置くか、またはコサイン類似度行列をどこに置くか?感謝
ビルアンカラゴン、ブラック

1
docsはドキュメント、Zコサイン類似度マトリックスです
Uri Goren

3

clustMixTypeパッケージは、より良い結果/洞察を与えると思います。

使用してこのパッケージを使用すると、直接カテゴリと数値データを組み合わせて使用することができ、それがホットエンコーディングのいずれかの種類を必要としません。

データを入力するだけで、自動的にカテゴリデータと数値データに分離されます。分離時に問題が見つかった場合は、as.factor(to convert to a categorical)およびのような関数を使用できますas.numeric(to convert to a Numeric field)

Lambda(mean Distance value)事前に計算して、アルゴリズムへの入力として供給することができます。

クラスターの最適な数がわからない場合は、を使用してWSS(within Sum of Squares)plot(elbow chart)クラスターの最適な数を決定できます。


2

すべてのクラスタリング手法は、ある種の距離メトリックを使用します。また、距離は本質的に非類似度の尺度であることを覚えておいてください。したがって、0と1の間で類似度を正規化すると、距離は単に1の類似度になります。

多数のクラスターを指定する必要のないアルゴリズムについては、もちろん階層的クラスター化手法があり、本質的には好きな場所で「カット」できるツリーのような構造を構築します(いくつかのパフォーマンスメトリックを使用して自動的に行うことができます) )

X-meansはK-meansのバージョンで、特定の数のKを試し、評価関数を最大化するものを選択します。

平均シフトは、自然数のクラスターを「検出」しますが、たとえば、帯域幅などの他のパラメーターの影響を受けやすくなります。

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