You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不使用heapq实现完全链接法层次聚类的代码问题排查求助

不使用heapq实现完全链接法层次聚类的代码问题排查求助

各位大佬好!我现在在做层次聚类,打算用完全链接法(complete-link),而且不想借助heapq库,自己用优先队列来实现,但跑出来的结果和预期差得特别远,实在找不到问题在哪,想请大家帮忙看看!

我用来聚类的是存在data文件夹里的1095份文档,目前写的代码如下(后半部分没粘贴完整,抱歉):

from nltk.stem.porter import PorterStemmer
import os
import numpy as np

porter_stemmer = PorterStemmer()

script_dir = os.path.dirname(__file__)
txt_folder_path = os.path.join(script_dir, 'data') 
output_folder = os.path.join(script_dir, 'output')
sw_path = os.path.join(script_dir, 'stopwords.txt')
docfreq = {}

with open(sw_path, 'r') as sw:
    stopwords = set(sw.read().splitlines())

txt_files = [f for f in os.listdir(txt_folder_path) if f.endswith('.txt')]
N = len(txt_files)

for filename in txt_files:
    file_path = os.path.join(txt_folder_path, filename)
    
    with open(file_path, 'r') as f:
        data = f.read().lower()
        
        adjusted = [word for word in data.split() if word not in stopwords]
        stemmed = [porter_stemmer.stem(word) for word in adjusted]
        
        # 后续统计词频、构建文档特征向量的代码,以及优先队列实现聚类的部分没粘贴全

目前我自己怀疑几个方向,但拿不准:

  • 文档的特征提取(比如TF-IDF计算)是不是有逻辑错误?
  • 自己实现的优先队列有没有完全符合完全链接法的规则?毕竟完全链接是取两个簇中最远样本的距离作为簇间距离,这个核心逻辑是不是写错了?
  • 距离计算的方式选得对不对?比如文档聚类常用余弦相似度,但我是不是用了不合适的距离度量?

麻烦各位帮忙分析下可能的问题,或者需要我补充哪些代码/信息方便排查?

备注:内容来源于stack exchange,提问作者吳思覦

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 11:20:28