不使用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,提问作者吳思覦
相关产品推荐
相关产品推荐

