文件的聚类与它的结构。

问题描述 投票:2回答:2

我正在研究通过观察文档的结构来对文档进行聚类。

我在下面的代码中提取了BERT嵌入变量X的结构。

我正在尝试什么。

for num_clusters in np.arange(2,200):
    model = KMeans(n_clusters=num_clusters)
    model.fit(X)
    pred = model.predict(X)
    centers = model.cluster_centers_

    cluster_sum = 0
    for i , c in enumerate(centers):
        use = []
        for j , p in enumerate(pred):
            if p == i:
                use.append(X[j])
        score = 0
        for m in range(len(use)):
            for n in range(len(use)):
                score+=cos_similarity(use[m],use[n])
        score = score/(len(use)*len(use))
        cluster_sum += score
    cluster_sum=cluster_sum/num_clusters

我写了这段代码来寻找聚类的相似度分数(结合所有聚类的相似度分数).我面临的问题:随着聚类数量的增加,分数也在增加。

这个图是@Cyrus在回答中提到的Knee算法的图。我不知道应该在哪里画线。

enter image description here

python machine-learning cluster-analysis k-means unsupervised-learning
2个回答
3
投票

有不少主题可以给你指出正确的方向。你可以看看一些像:

  1. 肘法
  2. 剪影分析
  3. 不同类型的聚类算法,不依赖于预先给出聚类数量(如DBSCAN)。

希望能帮到你!


1
投票

我的回答更多的是针对你问题的数学方面。

落实... sklearn's KMeans 使用欧氏距离来衡量输入数据中数据点之间的相似性。然而,您似乎是在尝试用余弦相似度来评估聚类质量--这是一种不同的距离测量方法,聚类结果已被优化。这可以解释随着聚类数量的增加,聚类得分的增加。

您是否注意到 KMeansinertia_ 属性,该属性对应于样本到其最接近的聚类中心的平方距离之和;这可以被认为是一个有效的聚类得分。KMeans 使用欧氏距离。

如果对你有帮助,我很高兴

© www.soinside.com 2019 - 2024. All rights reserved.