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

Scikit Learn:如何将TF-IDF得分最高的前n个词输入K-means聚类

如何仅使用TF-IDF得分最高的前n个词进行K-Means聚类

当然可以实现这个需求!核心思路是先找出TF-IDF向量中全局权重最高的前n个词,然后只保留这些词对应的特征列作为K-Means的输入。下面是具体的实现步骤和修改后的代码:

实现步骤

  • 计算每个词(TF-IDF特征)的全局总TF-IDF得分(用所有文档中该词的得分总和衡量其整体重要性)
  • 根据总得分排序,选出前n个词对应的特征索引
  • 从原TF-IDF矩阵中提取这些索引对应的列,得到精简后的特征矩阵
  • 用精简后的矩阵进行K-Means聚类和后续的PCA可视化

修改后的完整代码

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

# 假设你已定义变量:num_clusters, max_iterations, pca_num_components, labels_color_map, df_doc_wholetext

# 1. 初始化TF-IDF向量器并生成矩阵
vect = TfidfVectorizer(ngram_range=(1,3), stop_words='english')
tfidf_matrix = vect.fit_transform(df_doc_wholetext['csv_text'])

# 2. 筛选前n个TF-IDF权重最高的词
n = 100  # 替换为你需要的前n个词的数量
# 获取所有特征(词)的名称
feature_names = vect.get_feature_names_out()
# 计算每个特征的全局总TF-IDF得分
tfidf_sums = tfidf_matrix.sum(axis=0).A1  # A1将矩阵转为一维数组
# 按得分从高到低排序,提取前n个特征的索引
top_n_indices = tfidf_sums.argsort()[::-1][:n]

# 3. 提取精简后的TF-IDF矩阵(仅保留前n个特征)
reduced_tfidf_matrix = tfidf_matrix[:, top_n_indices]

# 4. 执行K-Means聚类
clustering_model = KMeans(
    n_clusters=num_clusters,
    max_iter=max_iterations,
    precompute_distances="auto",
    n_jobs=-1
)
labels = clustering_model.fit_predict(reduced_tfidf_matrix)

# 5. PCA降维并可视化(流程和原代码一致,仅使用精简后的矩阵)
x = reduced_tfidf_matrix.todense()
reduced_data = PCA(n_components=pca_num_components).fit_transform(x)
fig, ax = plt.subplots()
for index, instance in enumerate(reduced_data):
    pca_comp_1, pca_comp_2 = reduced_data[index]
    color = labels_color_map[labels[index]]
    ax.scatter(pca_comp_1, pca_comp_2, c=color)
plt.show()

# 可选:查看筛选出的前n个词
top_n_words = [feature_names[i] for i in top_n_indices]
print(f"Top {n} TF-IDF words:")
print(top_n_words)

关键细节说明

  • 用总得分衡量全局重要性:总得分越高,说明这个词在更多文档中拥有较高的TF-IDF值,更具语料级的代表性;如果想改用平均得分,只需把tfidf_sums = tfidf_matrix.sum(axis=0).A1改成tfidf_means = tfidf_matrix.mean(axis=0).A1,后续排序逻辑不变。
  • argsort()[::-1][:n]:argsort()返回按得分从小到大排序的索引,[::-1]反转成从大到小,[:n]截取前n个索引。

内容的提问来源于stack exchange,提问作者SVK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:31:48