欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > 特征工程中的三大向量化工具详解

特征工程中的三大向量化工具详解

2025/12/14 3:54:56 来源:https://blog.csdn.net/qq_28309121/article/details/145936558  浏览:    关键词:特征工程中的三大向量化工具详解
特征工程中的三大向量化工具详解

 

在文本处理和特征工程中,`TfidfVectorizer`、`CountVectorizer` 和 `DictVectorizer` 是常用的工具,用于将原始数据转换为机器学习模型可用的数值特征。以下是它们的核心区别、用法及示例:

1. CountVectorizer(词频向量化)

功能与原理
  • 作用:将文本转换为词频矩阵,统计每个词在文档中的出现次数。
  • 核心步骤:
    1. 分词:将文本按空格或规则切分为单词。
    2. 构建词表:基于所有文档生成词表(词汇表)。
    3. 生成词频矩阵:每行表示一个文档,每列表示一个词,值为词频。
关键参数

参数

说明

stop_words

过滤停用词(如 "the", "is")

max_features

仅保留词表中前 N 个高频词

ngram_range

是否提取 N-gram(如 (1,2) 包含单词和双词组合)

token_pattern

通过正则表达式控制分词规则(如

r"(?u)\b\w\w+\b"

过滤单字词)。

示例代码
from sklearn.feature_extraction.text import CountVectorizer
​
corpus = ["I love machine learning.","Machine learning is fun!","I hate boring lectures."
]
​
# 初始化向量化器
vectorizer = CountVectorizer(stop_words="english")
# # 调整参数:禁用停用词过滤,允许包含单字词
# vectorizer = CountVectorizer(
#     stop_words=None,  # 不过滤停用词
#     token_pattern=r"(?u)\b\w+\b"  # 允许单字词(如 "I")
# )
X = vectorizer.fit_transform(corpus)
​
# 输出词表和词频矩阵
print("词表:", vectorizer.get_feature_names_out())
print("词频矩阵:\n", X.toarray())

输出
词表: ['boring' 'fun' 'hate' 'learning' 'lectures' 'love' 'machine']
词频矩阵:[[0 0 0 1 0 1 1]  # "love", "machine", "learning"[0 1 0 1 0 0 1]   # "fun", "machine", "learning"[1 0 1 0 1 0 0]]  # "boring", "hate", "lectures"

  • 代码中设置了 stop_words="english",因此常见停用词(如 "I"、"is"、"." 等)被排除在词表外
  • 词频矩阵的列数严格等于词表长度,每个列对应词表中的一个词,统计其在各文档中的出现次数。

2. TfidfVectorizer(TF-IDF 向量化)

功能与原理
  • 作用:在词频基础上,计算 TF-IDF 值(词频-逆文档频率),衡量词的重要性。
  • 公式:
    • TF (词频):词在文档中的出现频率(频数 / 词表长度)。
    • IDF (逆文档频率):log(总文档数 / 包含该词的文档数)
    • TF-IDF:TF * IDF,降低常见词的权重,突出重要词。
注意:TF-IDF值越低越重要(因为要做分类,值高了表明这个词出现太频繁了,不能作为分类的依据)
关键参数
CountVectorizer 相同,额外支持:

参数

说明

stop_words

过滤停用词(如 "the", "is")

max_features

仅保留词表中前 N 个高频词

ngram_range

是否提取 N-gram(如 (1,2) 包含单词和双词组合)

token_pattern

通过正则表达式控制分词规则(如

r"(?u)\b\w\w+\b"

过滤单字词)。

use_idf

是否启用 IDF 计算(默认为 True)

smooth_idf

对 IDF 做平滑处理(避免除零错误)

 

示例代码
from sklearn.feature_extraction.text import TfidfVectorizer
​
corpus = ["I love machine learning.","Machine learning is fun!","I hate boring lectures."
]
​
# 初始化 TF-IDF 向量化器
vectorizer = TfidfVectorizer(stop_words="english")
X = vectorizer.fit_transform(corpus)
​
# 输出 TF-IDF 矩阵
print("TF-IDF 矩阵:\n", X.toarray().round(2))

输出
TF-IDF 矩阵:[[0.   0.   0.   0.   0.85 0.53]  # "love" 和 "machine"("machine" 在多个文档出现,权重较低)[0.   0.74 0.   0.   0.   0.67]   # "fun" 和 "machine"[0.66 0.   0.52 0.52 0.   0.   ]] # "boring", "hate", "lectures"


3. DictVectorizer(字典向量化)

功能与原理
  • 作用:将 字典形式 的特征数据转换为数值矩阵,支持混合类型特征(数值型 + 类别型)。
  • 核心步骤:
关键参数

 

参数

说明

sparse

是否返回稀疏矩阵(默认为 True)

 

示例代码

from sklearn.feature_extraction import DictVectorizer
​
data = [{"age": 25, "gender": "M", "city": "Beijing"},{"age": 30, "gender": "F", "city": "Shanghai"},{"age": 28, "gender": "M", "city": "Guangzhou"}
]
​
# 初始化向量化器
vectorizer = DictVectorizer(sparse=False)
X = vectorizer.fit_transform(data)
​
# 输出特征名和矩阵
print("特征名:", vectorizer.get_feature_names_out())
print("数值矩阵:\n", X)

输出
特征名: ['age', 'city=Beijing', 'city=Guangzhou', 'city=Shanghai', 'gender=F', 'gender=M']
数值矩阵:[[25.  1.  0.  0.  0.  1.]  # age=25, city=Beijing, gender=M[30.  0.  0.  1.  1.  0.]  # age=30, city=Shanghai, gender=F[28.  0.  1.  0.  0.  1.]] # age=28, city=Guangzhou, gender=M


对比总结

工具

输入类型

核心功能

适用场景

CountVectorizer

文本列表

生成词频矩阵

文本分类、词频分析

TfidfVectorizer

文本列表

生成 TF-IDF 矩阵

文本分类、信息检索

DictVectorizer

字典列表

将混合类型特征转换为数值矩阵

结构化数据(数值 + 类别特征)

 


选择建议

1.文本数据:

  • 简单词频统计 → CountVectorizer
  • 需要评估词重要性 → TfidfVectorizer

2. 结构化数据:

  • 包含数值和类别特征 → DictVectorizer

3.高维稀疏数据:

  • 优先使用 sparse=True 节省内存。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词