回答:
まず、すべてのクラスタリングアルゴリズムは、ある種の距離メトリックを使用しています。どのメトリックにも独自のプロパティがあり、さまざまな種類の問題に適しているため、これは実際に重要です。
レコード間にコサイン類似性があると言ったので、これは実際には距離行列です。この行列は、いくつかのクラスタリングアルゴリズムへの入力として使用できます。
ここで、階層的クラスタリングから始めることをお勧めします。定義された数のクラスターを必要とせず、データを入力して距離を選択するか、距離マトリックスを入力できます(距離を何らかの方法で計算します)。
階層的クラスタリングは計算にコストがかかるため、大量のデータがある場合は、サンプルのみから始めることができます。
DBSCAN は、距離の代わりに類似度を使用して簡単に実装できます。<=イプシロンを> =イプシロンに変更するだけです。
HACは、 "min"と "max"を入れ替えた場合(少なくとも単一リンク、完全リンク、UPGMA、WPGMA-Wardを使用しない)の類似性でも問題なく機能します(最小ではなく最大の類似性でマージしたい場合)。距離)。
怠惰な場合は、類似点を距離に変換することもできます。最大値が固定されている場合は、dist = max-simで十分です。
SimilarityNeighborPredicate
ます。
私は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
はドキュメント、Z
コサイン類似度マトリックスです
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)
クラスターの最適な数を決定できます。
すべてのクラスタリング手法は、ある種の距離メトリックを使用します。また、距離は本質的に非類似度の尺度であることを覚えておいてください。したがって、0と1の間で類似度を正規化すると、距離は単に1の類似度になります。
多数のクラスターを指定する必要のないアルゴリズムについては、もちろん階層的クラスター化手法があり、本質的には好きな場所で「カット」できるツリーのような構造を構築します(いくつかのパフォーマンスメトリックを使用して自動的に行うことができます) )
X-meansはK-meansのバージョンで、特定の数のKを試し、評価関数を最大化するものを選択します。
平均シフトは、自然数のクラスターを「検出」しますが、たとえば、帯域幅などの他のパラメーターの影響を受けやすくなります。