首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python文本特征提取(TF-IDF)

Python文本特征提取(TF-IDF)

作者头像
用户2423478
发布2025-10-31 18:48:12
发布2025-10-31 18:48:12
5900
代码可运行
举报
文章被收录于专栏:具身小站具身小站
运行总次数:0
代码可运行

1. TF-IDF概述

TF-IDF (Term Frequency-Inverse Document Frequency) 是一种统计方法,用于评估一个词对一个文档集或语料库中的某一个文档的重要性。TfidfVectorizer 是 CountVectorizer 的扩展,它结合了词频(TF)和逆文档频率(IDF),生成更有效的文本表示。

计算公式:

  • 词频(TF): tf(t,d) = count(t,d) / sum(count(t_i,d) for t_i in d)
  • 逆文档频率(IDF): idf(t,D) = log(N / (1 + df(t))) 或 log((1 + N) / (1 + df(t))) + 1(带平滑)
  • TF-IDF: tfidf(t,d,D) = tf(t,d) * idf(t,D)

其中:

  • t 是词项(term)
  • d 是文档(document)
  • D 是文档集
  • N 是文档总数
  • df(t) 是包含词项t的文档数

TfidfVectorizer 本质上是 CountVectorizer 和 TfidfTransformer 的组合, 先使用 CountVectorizer 计算词频,再使用 TfidfTransformer 应用IDF缩放。

关键参数详解 TfidfVectorizer 继承了 CountVectorizer 的所有参数,并增加了以下特有参数:

参数

类型

默认值

说明

norm

‘l1’, ‘l2’, None

‘l2’

归一化方式

use_idf

bool

True

是否使用IDF

smooth_idf

bool

True

是否在IDF计算中加1平滑

sublinear_tf

bool

False

是否应用次线性TF缩放(tf = 1 + log(tf))

核心方法 TfidfVectorizer 继承了 CountVectorizer 的所有方法,并增加了idf_属性,用于存储计算出的IDF值

2. CountVectorizer 对比

场景

选择

简单词频统计

CountVectorizer

大多数文本分类任务

TfidfVectorizer

中文文本处理

TfidfVectorizer + jieba分词

需要解释性

TfidfVectorizer(可查看IDF值)

后续需词频信息

CountVectorizer

常用场景的参数配置

2.1 预处理标准化(统一处理大小写、特殊字符等)

代码语言:javascript
代码运行次数:0
运行
复制
CountVectorizer(lowercase=True)

2.2 合理设置n-gram范围:

代码语言:javascript
代码运行次数:0
运行
复制
# 文本分类通常(1,2)足够,信息检索可能需要(1,3)
TfidfVectorizer(ngram_range=(1, 2))

2.3 频率阈值设置:

代码语言:javascript
代码运行次数:0
运行
复制
# 避免极端高频/低频词
TfidfVectorizer(max_df=0.8, min_df=2)

2.4 特征数量控制:

代码语言:javascript
代码运行次数:0
运行
复制
# 防止维度灾难
TfidfVectorizer(max_features=5000)

2.5 内存优化(大数据):

代码语言:javascript
代码运行次数:0
运行
复制
# - 限制特征数量
# - 使用HashingVectorizer
# - 分批处理

3. 程序实现

代码语言:javascript
代码运行次数:0
运行
复制
import numpy as np
import jieba
import sklearn
from sklearn.feature_extraction.text import TfidfVectorizer
text = ["自然语言处理是人工智能处理的一个重要领域。",
        "自然语言处理和深度学习有着密切的关系。",
        "自然语言处理有很多自然语言相关的应用。",
        "深度学习是机器学习的一个分支。",
    ]
words_list = [jieba.lcut(t) for t in text]
words_seg_str = [" ".join(t) for t in words_list]
print("分词后的文本:",words_list_str)
tfidf_vec = TfidfVectorizer()
words_tfidf = tfidf_vec.fit_transform(words_seg_str)
print("TF-IDF及其模型特征向量:")
print(tfidf_vec.get_feature_names_out())
print("IDF值:", np.round(tfidf_vec.idf_,1))
print(np.round(words_tfidf.toarray(),1))
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 具身小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. TF-IDF概述
  • 2. CountVectorizer 对比
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档