TfidfVectorizer 文本特征提取完整教程

举报
人工智能-张晨光 发表于 2026/08/07 12:00:49 2026/08/07
【摘要】 核心:fit_transform () 用于训练集(学习词典 + IDF);transform () 仅转换测试集,不能再 fit,避免数据泄露输入格式:每条文本是 1 个字符串,词语用空格分隔。英文自带分割;中文必须手动分词。1. 英文完整示例from sklearn.feature_extraction.text import TfidfVectorizer# 语料,每条是一篇文档,单词...
核心:fit_transform () 用于训练集(学习词典 + IDF);transform () 仅转换测试集,不能再 fit,避免数据泄露

输入格式:每条文本是 1 个字符串,词语用空格分隔。英文自带分割;中文必须手动分词。

1. 英文完整示例


from sklearn.feature_extraction.text import TfidfVectorizer

# 语料,每条是一篇文档,单词空格隔开
corpus = [
    "bawangchaji beer tastes good",
    "milk tea sister looks pretty",
    "beer is very good"
]

# 实例化tfidf对象
tfidf = TfidfVectorizer(
    stop_words="english",   # 开启英文停用词
    max_features=1000,      # 最多保留多少特征词
    ngram_range=(1,1)       # 只用1元词
)

# ----------------训练集:fit_transform 学习词典、IDF,同时输出特征矩阵----------------
X = tfidf.fit_transform(corpus)

print("特征词(矩阵每一列对应的单词):")
print(tfidf.get_feature_names_out())
print("\n词到列下标的映射:")
print(tfidf.vocabulary_)

print("\n稀疏矩阵(节省内存):")
print(X)
print("\n稠密矩阵,元素就是TF‑IDF权重:")
print(X.toarray())

2. 训练集、测试集标准写法(重点!)


train_docs = ["apple banana", "banana orange"]
test_docs = ["apple orange"]

tfidf = TfidfVectorizer()

# 训练集:fit+transform,构建词典和idf
X_train = tfidf.fit_transform(train_docs)

# 测试集:只transform!!不fit!复用训练集学到的词典和idf
X_test = tfidf.transform(test_docs)

3. 中文使用要点

TfidfVectorizer不会中文分词,需要先用 jieba 分词,再用空格拼接。
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer

corpus_cn = [
    "霸王茶姬啤酒真好喝",
    "奶茶妹妹真好看"
]

# 分词处理,转空格分隔字符串
processed = []
for s in corpus_cn:
    words = jieba.lcut(s)
    processed.append(" ".join(words))

tfidf = TfidfVectorizer()
X = tfidf.fit_transform(processed)
print(X.toarray())
print(tfidf.get_feature_names_out())

常用参数

TfidfVectorizer(
    stop_words="english",    # 英文停用词;中文要自己传集合
    max_features=500,       # 取词频最高的N个词做特征
    ngram_range=(1,2),      # 同时提取1元、2元词组
    use_idf=True,           # True=TF‑IDF;False=只用TF词频
)

返回对象说明

  1. 返回是scipy 稀疏矩阵,适合大数据,节约内存;
  2. .toarray()转为 numpy 二维数组,小数据集使用,大数据不要调用,会占大量内存;
  3. get_feature_names_out():矩阵每一列对应的词语;
  4. 默认开启 L2 归一化:每一行文档向量的模等于 1。

口诀

fit_transform():学知识 + 做转换,只用在训练集

transform():只转换,不学新知识,只用在测试集

常见错误

  1. 中文直接传入原始句子,不分词 → 把整句话当成 1 个特征;
  2. 测试集使用fit_transform(),造成数据泄露;
  3. 把 list 直接传入,必须是字符串列表。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。