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

如何提取TfidfVectorizer的TF-IDF计算结果以掌握其计算逻辑

提取TfidfVectorizer的TF-IDF数值与计算逻辑解析

一、提取计算出的TF-IDF数值

要查看TfidfVectorizer计算出的具体数值,按以下步骤操作即可:

  • 获取所有被提取的特征词(即原始文本中出现的所有标签):调用vectorizer.get_feature_names_out()方法
  • 将稀疏矩阵格式的结果转为易读的密集矩阵:调用tfidf_matrix.toarray()方法
  • 把特征词和对应数值配对,输出每个样本的TF-IDF明细

完整代码示例:

data = ['Souvenir shop|Architecture and art|Culture and history', 
        'Souvenir shop|Resort|Diverse cuisine|Fishing|Folk games|Beautiful scenery', 
        'Diverse cuisine|Resort|Beautiful scenery']

# 指定分割规则:按|分割标签,避免带空格的短语被拆分
vectorizer = TfidfVectorizer(token_pattern=r'[^|]+')
tfidf_matrix = vectorizer.fit_transform(data)

# 获取特征词列表
feature_names = vectorizer.get_feature_names_out()
# 转为密集矩阵
dense_matrix = tfidf_matrix.toarray()

# 打印每个样本的TF-IDF值
for idx, doc in enumerate(dense_matrix):
    print(f"样本 {idx+1} 的TF-IDF值:")
    for word, value in zip(feature_names, doc):
        if value > 0:
            print(f"  {word}: {round(value, 4)}")

注意:默认的token_pattern会把空格当作分隔符,导致Souvenir shop这类短语被拆成两个独立词,这很可能是你手动计算和工具输出不一致的核心原因之一。

二、默认计算逻辑解析

TfidfVectorizer默认的TF-IDF计算规则分为四步:

  1. 词频(TF):某个词在当前样本中出现的次数(你的案例里每个标签在单一样本中仅出现1次,所以TF值全为1)
  2. 逆文档频率(IDF):采用平滑公式避免IDF为0的情况,公式为:
    idf(t) = log((1 + 总样本数) / (1 + 包含词t的样本数)) + 1
    
  3. 原始TF-IDF值:词频(TF) × 逆文档频率(IDF)
  4. L2归一化:将每个样本的TF-IDF向量除以它的L2范数(向量各元素平方和的平方根),最终让每个样本的向量长度为1

举个实际计算例子,以Souvenir shop为例:

  • 总样本数=3,包含该词的样本数=2
  • idf = log((1+3)/(1+2)) +1 ≈ 0.2877 +1 = 1.2877
  • 原始TF-IDF=1×1.2877=1.2877
  • 第一个样本的向量L2范数=√(1.2877²×3)≈2.236
  • 归一化后的值=1.2877/2.236≈0.5774,和代码输出结果完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 09:32:50