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

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

 

在文本处理和特征工程中,`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 节省内存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/70883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ Qt常见面试题(4):Qt事件过滤器

在 Qt 中,事件过滤器(Event Filter)提供了一种机制,可以拦截并处理对象的事件(如鼠标事件、键盘事件等),在事件到达目标对象之前对其进行预处理。事件过滤器通常用于以下场景: 捕获和处理特定的事件(如鼠标点击、按键等);对事件进行筛选或修改;实现全局的事件监听功…

TCP基本入门-简单认识一下什么是TCP

部分内容来源:小林Coding TCP的特点 1.面向连接 一定是“一对一”才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的 2.可靠的 无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个…

PING命令TTL解析

在 ping 命令中,TTL(Time to Live,生存时间) 是 IP 数据包的核心字段之一,用于控制数据包在网络中的生命周期。以下是针对 TTL 的简明解析: 1. TTL 的核心作用 防循环机制:TTL 是一个计数器&a…

PySide(PyQT)重新定义contextMenuEvent()实现鼠标右键弹出菜单

在 PySide中,contextMenuEvent() 是 QWidget 类(以及继承自它的所有子类)的一个事件处理方法,主要用于处理上下文菜单事件,也就是当用户在控件上右键点击时触发的事件。 • 通过重新定义contextMenuEvent()来实现自定…

GitHub SSH连接问题解决指南

🔍 GitHub SSH连接问题解决指南 问题描述 遇到错误:ssh: connect to host github.com port 22: Connection refused 说明您的网络环境无法访问GitHub的SSH端口22,常见原因: 防火墙/网络运营商限制(国内常见&#xf…

Go红队开发—并发编程

文章目录 并发编程go协程chan通道无缓冲通道有缓冲通道创建⽆缓冲和缓冲通道 等协程sync.WaitGroup同步Runtime包Gosched()Goexit() 区别 同步变量sync.Mutex互斥锁atomic原子变量 SelectTicker定时器控制并发数量核心机制 并发编程阶段练习重要的细节端口扫描股票监控 并发编程…

RabbitMQ 的介绍与使用

一. 简介 1> 什么是MQ 消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已。 其主要用途:不同进程Process/线程T…

常用的AI文本大语言模型汇总

AI文本【大语言模型】 1、文心一言https://yiyan.baidu.com/ 2、海螺问问https://hailuoai.com/ 3、通义千问https://tongyi.aliyun.com/qianwen/ 4、KimiChat https://kimi.moonshot.cn/ 5、ChatGPThttps://chatgpt.com/ 6、魔塔GPT https://www.modelscope.cn/studios/iic…

在自己的数据上复现一下LlamaGen

git仓库:https://github.com/FoundationVision/LlamaGen 数据集准备 如果用ImageFolder读取,则最好和ImageNet一致。 data_path/class_1/image_001.jpgimage_002.jpg...class_2/image_003.jpgimage_004.jpg......class_n/image_005.jpgimage_006.jpg.…

Go入门之接口

type Usber interface {start()stop() } type Phone struct {Name string }func (p Phone) start() {fmt.Println(p.Name, "启动") } func (p Phone) stop() {fmt.Println(p.Name, "关机") } func main() {p : Phone{Name: "华为手机",}var p1 U…

【数据结构进阶】哈希表

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:数据结构 目录 前言 一、哈希表的概念 二、哈希函数的实现方法 1. 直接定址法 2. 除留余数法 三、哈希冲突 1. 开放定址法(闭散列&#xff0…

《深度学习实战》第4集:Transformer 架构与自然语言处理(NLP)

《深度学习实战》第4集:Transformer 架构与自然语言处理(NLP) 在自然语言处理(NLP)领域,Transformer 架构的出现彻底改变了传统的序列建模方法。它不仅成为现代 NLP 的核心,还推动了诸如 BERT、…

高效管理 React 状态和交互:我的自定义 Hooks 实践

高效管理 React 状态和交互:自定义 Hooks 实践 在 React 中,Hooks 是一种使我们能够在函数组件中使用状态和副作用的强大工具。随着项目的增大,重复的逻辑可能会出现在多个组件中,这时使用自定义 Hooks 就非常合适。它们帮助我们…

Exoplayer(MediaX)实现音频变调和变速播放

在K歌或录音类应用中变调是个常见需求,比如需要播出萝莉音/大叔音等。变速播放在影视播放类应用中普遍存在,在传统播放器Mediaplayer中这两个功能都比较难以实现,特别在低版本SDK中,而Exoplayer作为google官方推出的Mediaplayer替…

Meta最新研究:从单张照片到3D数字人的革命性突破

随着人工智能技术的发展,3D建模和虚拟人物生成逐渐变得更加普及和高效。Meta(前身为Facebook)的最新研究成果展示了如何仅通过一张普通手机拍摄的照片就能生成高质量、全方位的3D数字人。这项技术不仅适用于虚拟试衣、游戏角色建模,还能广泛应用于AR/VR内容生成等领域。本文…

软件供应链安全工具链研究系列——RASP自适应威胁免疫平台(上篇)

1.1 基本能力 RASP是一种安全防护技术,运行在程序执行期间,使程序能够自我监控和识别有害的输入和行为。也就是说一个程序如果注入或者引入了RASP技术,那么RASP就和这个程序融为一体,使应用程序具备了自我防护的能力,…

2025-02-27 学习记录--C/C++-PTA 7-29 删除字符串中的子串

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 二、代码&#xff08;C语言&#xff09;⭐️ #include <stdio.h> // 引入标准输入输出库&#xff0c…

Redis---字符串SDS(简单动态字符串)底层结构

文章目录 什么是SDS&#xff08;简单动态字符串&#xff09;SDS结构SDS的优点O(1) 时间复杂度获取字符串长度避免缓冲区溢出减少内存重分配次数二进制安全兼容C语言字符串函数 SDS的操作总结 什么是SDS&#xff08;简单动态字符串&#xff09; redis是由C语言编写的&#xff0…

Elasticsearch:使用阿里云 AI 服务进行嵌入和重新排名

作者&#xff1a;来自 Elastic Toms Mura 将阿里云 AI 服务功能与 Elastic 结合使用。 更多阅读&#xff0c;请参阅 “Elasticsearch&#xff1a;使用阿里 infererence API 及 semantic text 进行向量搜索”。 在本文中&#xff0c;我们将介绍如何将阿里云 AI 功能与 Elastics…

Spring Cloud Alibaba与Spring Boot、Spring Cloud版本对应关系

一、前言 在搭建SpringCloud项目环境架构的时候&#xff0c;需要选择SpringBoot和SpringCloud进行兼容的版本号&#xff0c;因此对于选择SpringBoot版本与SpringCloud版本的对应关系很重要&#xff0c;如果版本关系不对应&#xff0c;常见的会遇见项目启动不起来&#xff0c;怪…