Scikit-learn中的TfidfVectorizer是一个强大的工具,用于将文本数据转换为TF-IDF(词频-逆文档频率)特征矩阵。以下是对其的详细介绍:


1. TF-IDF简介

  • TF(Term Frequency):词频,衡量词在文档中的出现频率。计算公式为:
    @@ \text{TF}(t, d) = \frac{\text{词 t 在文档 d 中出现的次数}}{\text{文档 d 的总词数}} @@

  • IDF(Inverse Document Frequency):逆文档频率,衡量词的普遍重要性。计算公式为:
    @@ \text{IDF}(t) = \log \frac{\text{文档总数}}{\text{包含词 t 的文档数 + 1}} @@
    (当smooth_idf=True时,分母加1进行平滑处理)

  • TF-IDF:综合TF和IDF,突出文档中的重要词:
    @@ \text{TF-IDF}(t, d) = \text{TF}(t, d) \times \text{IDF}(t) @@


2. TfidfVectorizer的作用

将原始文本转换为TF-IDF加权特征矩阵,适用于文本分类、聚类等任务。其流程为: 1. 文本分词:按规则(如正则)提取词(token)。 2. 构建词表:统计所有文档的词,生成词汇表。 3. 计算TF-IDF:对每个词,计算其在各文档的TF-IDF值。


3. 主要参数解析

  • 文本预处理

    • lowercase=True:转为小写。
    • stop_words=None:停用词列表(如'english')。
    • token_pattern=r"(?u)\b\w\w+\b":匹配至少2字符的词的正则。
  • 特征提取控制

    • ngram_range=(1,1):n-gram范围,如(1,2)包含单字和双字词。
    • max_df=1.0/min_df=1:忽略高于max_df或低于min_df频率的词。
    • max_features=None:限制最大特征数。
  • TF-IDF计算

    • use_idf=True:启用IDF加权。
    • smooth_idf=True:平滑IDF,避免除零(公式中加1)。
    • sublinear_tf=False:若为True,TF替换为@@1 + \log(\text{TF})@@。
  • 归一化

    • norm='l2':对特征向量按L2范数归一化。

4. 主要属性和方法

  • 属性

    • vocabulary_:词到特征索引的字典。
    • idf_:各词的IDF值数组。
  • 方法

    • fit(raw_documents):学习词表和IDF。
    • transform(raw_documents):将文本转换为TF-IDF矩阵。
    • fit_transform(...):合并fit和transform。

5. 使用示例

from sklearn.feature_extraction.text import TfidfVectorizer

corpus = [
    "This is the first document.",
    "This document is the second document.",
    "And this is the third one.",
]

vectorizer = TfidfVectorizer(stop_words='english', ngram_range=(1,2))
X = vectorizer.fit_transform(corpus)

print("特征词:", vectorizer.get_feature_names_out())
print("TF-IDF矩阵:\n", X.toarray())

输出: - 特征词:['and', 'document', 'first', 'one', 'second', 'third'](简化的示例) - 矩阵为稀疏矩阵,可通过toarray()转为稠密形式。


6. 注意事项

  • 中文处理:需先分词(如用jieba),再传入TfidfVectorizer
  • 稀疏矩阵:输出为scipy.sparse.csr_matrix,节省内存。
  • 新数据处理:测试集需用训练集的vectorizer.transform(),而非重新拟合。
  • 特征维度ngram_rangemax_features过大易导致维度爆炸。

7. 常见问题与技巧

  • IDF平滑的作用:防止未在训练集出现的词导致除零错误。
  • 归一化的选择:L2归一化常用于保持向量方向一致性。
  • 参数调优:通过交叉验证调整max_dfmin_df等,以提升模型效果。

通过灵活调整参数,TfidfVectorizer能够有效捕捉文本关键特征,适用于大多数文本分析任务。

Tags:AI
Source:DeepSeek