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

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

?

在文本處理和特征工程中,`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.pswp.cn/web/70883.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70883.shtml
英文地址,請注明出處:http://en.pswp.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;怪…