如何将余弦距离矩阵用于均值偏移、DBSCAN 和光学等聚类算法?

数据挖掘 聚类 k-均值 数据库扫描 python-3.x 均值偏移
2022-03-02 15:28:55

我正在尝试为我的文本数据比较不同的聚类算法。我首先计算了 tf-idf 矩阵并将其用于余弦距离矩阵(余弦相似度)。然后我将这个距离矩阵用于 K-means 和层次聚类(病房和树状图)。我想将距离矩阵用于均值偏移、DBSCAN 和光学。

下面是显示距离矩阵的代码部分。

from sklearn.feature_extraction.text import TfidfVectorizer

#define vectorizer parameters
tfidf_vectorizer = TfidfVectorizer(max_df=0.8, max_features=200000,
                                 min_df=0.2, stop_words='english',
                                 use_idf=True, tokenizer=tokenize_and_stem, ngram_range=(1,3))

%time tfidf_matrix = tfidf_vectorizer.fit_transform(Strategies) #fit the vectorizer to synopses


terms = tfidf_vectorizer.get_feature_names()

from sklearn.metrics.pairwise import cosine_similarity
dist = 1 - cosine_similarity(tfidf_matrix)
print(dist)

我对 python 和集群都是新手。我找到了 K-means 和层次聚类的代码并试图理解它,但我无法将它应用于其他聚类算法。如果我能对每种聚类算法以及如何使用该距离矩阵在不同的聚类中实现(如果可能)进行一些简单的解释,那将非常有帮助。

提前致谢!

1个回答

可以使用余弦距离拟合几种 scikit-learn 聚类算法:

from collections      import defaultdict
from sklearn.datasets import load_iris
from sklearn.cluster  import DBSCAN, OPTICS

# Define sample data
iris = load_iris()
X = iris.data

# List clustering algorithms
algorithms = [DBSCAN, OPTICS] # MeanShift does not use a metric

# Fit each clustering algorithm and store results
results = defaultdict(int)
for algorithm in algorithms:
    results[algorithm] = algorithm(metric='cosine').fit(X)