整合 CountVectorizer 和 TfidfVectorizer 繪制詞云圖

本文分別整合 CountVectorizer 和 TfidfVectorizer 繪制詞云圖

? CountVectorizer

CountVectorizerscikit-learn 中用于 文本特征提取 的一個工具,它的主要作用是將一組文本(文本集合)轉換為詞頻向量(Bag-of-Words,詞袋模型)

簡單來說:

CountVectorizer 會把文本中的每一個詞(token)當作特征,然后統計每個詞在每個文本中出現的次數,最終輸出一個稀疏矩陣表示文本的“詞頻”。

🔧 作用與功能詳解:

  1. 分詞:自動將每個句子切分成詞(默認以空格分割,也可以自定義分詞器)。
  2. 構建詞典:對整個語料中所有出現的詞匯建立一個詞匯表(字典)。
  3. 向量化:將每個文本表示為一個向量,每個維度是某個詞在該文本中出現的次數。

📚 應用場景:

  • 文本分類(如垃圾郵件識別、情感分析)
  • 文本聚類
  • 信息檢索
  • 自然語言處理(NLP)中的特征工程

?? 注意:

  • CountVectorizer 不考慮詞語順序,即是典型的“詞袋模型”。
  • 它也不考慮語義(兩個同義詞視為不同詞)。
  • 你可以設置 max_featuresstop_wordsngram_range 等參數來優化結果。

? TfidfVectorizer

TfidfVectorizer 是 scikit-learn 提供的一個類,用于將原始文本轉化為TF-IDF 特征矩陣,常用于文本分類、聚類、信息檢索等任務。

🧠 TF-IDF 是什么?

TF-IDF = Term Frequency - Inverse Document Frequency

它是一種權重計算方法,用來衡量某個詞對某個文檔的重要性。

📌 1. TF(詞頻)公式:

T F ( t , d ) = 詞? t 在文檔? d 中出現的次數 文檔? d 中總詞數 TF(t, d) = \frac{\text{詞 } t \text{ 在文檔 } d \text{ 中出現的次數}}{\text{文檔 } d \text{ 中總詞數}} TF(t,d)=文檔?d?中總詞數?t?在文檔?d?中出現的次數?

表示某個詞在文檔中出現的頻率。

📌 2. IDF(逆文檔頻率)公式:

I D F ( t ) = log ? ( 1 + N 1 + D F ( t ) ) + 1 IDF(t) = \log \left( \frac{1 + N}{1 + DF(t)} \right) + 1 IDF(t)=log(1+DF(t)1+N?)+1

  • ( N ):語料庫中的總文檔數
  • ( DF(t) ):包含詞 ( t ) 的文檔數量

這個公式會讓出現在越少文檔中的詞權重越高,因為它更能“區別”文檔。

📌 3. TF-IDF 綜合計算:

T F - I D F ( t , d ) = T F ( t , d ) × I D F ( t ) TF\text{-}IDF(t, d) = TF(t, d) \times IDF(t) TF-IDF(t,d)=TF(t,d)×IDF(t)

?? 常用參數解釋

參數名含義
ngram_range=(1, 2)提取 uni-gram 和 bi-gram
max_df=0.85忽略出現在超過85%文檔中的詞
min_df=2忽略出現在少于2個文檔中的詞
stop_words='english'去除英文停用詞(中文需自定義)
tokenizer自定義分詞函數(適用于中文,結合 jieba)
use_idf=True是否使用逆文檔頻率
smooth_idf=True是否進行平滑(避免分母為0)

🧪 中文處理建議

因為 TfidfVectorizer 默認不適合中文,需要配合 jieba 分詞:

import jiebadef chinese_tokenizer(text):return jieba.lcut(text)vectorizer = TfidfVectorizer(tokenizer=chinese_tokenizer)
X = vectorizer.fit_transform(docs)

📊 輸出樣例

假設你有:

docs = ["我 愛 你", "你 愛 他", "他 愛 我"]

輸出的 TF-IDF 詞向量矩陣如下:

文檔索引
Doc10.700.500.500
Doc200.500.500.70
Doc30.500.5000.70

? CountVectorizer vs TfidfVectorizer

特性CountVectorizerTfidfVectorizer
核心思想統計詞頻(TF)統計 TF × IDF
向量值每個詞的出現次數每個詞的重要性權重
詞頻高是否意味著重要不一定(可能是常見詞)
適用場景適合簡單建模(如樸素貝葉斯)更適合文本分類、信息檢索等
是否考慮語料庫整體信息? 只考慮當前文檔? 考慮所有文檔的分布
是否支持平滑?? 支持平滑處理

? 什么是 n-gram?

n-gram 是指連續的 n 個詞。例如:

  • 輸入句子:"I love machine learning"
  • 1-gram(unigram): "I", "love", "machine", "learning"
  • 2-gram(bigram): "I love", "love machine", "machine learning"
  • 3-gram(trigram): "I love machine", "love machine learning"

🛠? ngram_range=(min_n, max_n) 說明

  • ngram_range=(1, 1):只提取 1-gram(默認)
  • ngram_range=(1, 2):提取 1-gram 和 2-gram
  • ngram_range=(2, 3):提取 2-gram 和 3-gram

? 示例代碼

from sklearn.feature_extraction.text import CountVectorizertext = ["I love machine learning"]# 提取1-gram和2-gram
vectorizer = CountVectorizer(ngram_range=(1, 2))
X = vectorizer.fit_transform(text)print(vectorizer.get_feature_names_out())
print(X.toarray())

輸出結果:

['i' 'i love' 'learning' 'love' 'love machine' 'machine' 'machine learning']
[[1 1 1 1 1 1 1]]

這表示:

  • 單個詞(unigram)和兩個詞組合(bigram)都被統計了。

🎯 使用場景建議

  • ngram_range=(1, 2):適合大多數 NLP 應用,可以捕捉常見詞和短語搭配。
  • ngram_range=(2, 2):適合挖掘關鍵詞對(如“機器 學習”)
  • ngram_range=(2, 3):更強調上下文結構,但維度較高,需要更多數據支持。

?? 注意:

  • 提取更多的 n-gram 會導致維度爆炸(特征太多),要結合 max_featuresmin_df 限制特征數量。
  • 高階 n-gram 更稀疏,也更依賴大規模語料支持。

? 詞云可視化

安裝相關的依賴

pip install wordcloud scikit-learn matplotlib

代碼

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
import matplotlib.pyplot as plt
from wordcloud import WordCloud# 示例文本
texts = ["Natural language processing is fun and exciting.","Machine learning and deep learning are key techniques in AI.","I love studying machine learning and natural language tasks.",
]# 初始化向量器,提取 1-gram 到 2-gram,可以使用CountVectorizer或TfidfVectorizer
vectorizer = CountVectorizer(ngram_range=(1, 2), stop_words='english')
# vectorizer = TfidfVectorizer(ngram_range=(1, 2), stop_words='english')X = vectorizer.fit_transform(texts)# 提取關鍵詞和其對應的 分數值,對于 TF-IDF 是分數值,對于 CountVectorizer 是頻率值
feature_names = vectorizer.get_feature_names_out()
print("Features:", feature_names)# 每個詞語在所有文檔中分數的總和
_scores = X.sum(axis=0).A1# 構建關鍵詞:權重的字典
word_dict = dict(zip(feature_names, _scores))# 生成詞云圖
wordcloud = WordCloud(width=800, height=400, background_color='white').generate_from_frequencies(word_dict)# 顯示圖形
plt.figure(figsize=(12, 6))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.title("TF-IDF Weighted WordCloud (1-2 gram)")
plt.show()

運行結果
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79024.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79024.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79024.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 用戶管理

用戶管理是 Linux 系統管理中的重要組成部分,它涉及到用戶和用戶組的創建、刪除、修改以及權限分配等操作。以下是關于用戶和用戶組管理的詳細說明: 一、用戶和用戶組的概念 (一)用戶(User) 用戶是系統中…

【HTTP/2和HTTP/3的應用現狀:看不見的革命】

HTTP/2和HTTP/3的應用現狀:看不見的革命 實際上,HTTP/2和HTTP/3已經被眾多著名網站廣泛采用,只是這場革命對普通用戶來說是"無形"的。讓我們揭開這個技術變革的真相。 著名網站的HTTP/2和HTTP/3采用情況 #mermaid-svg-MtfrNDo5DG…

青少年編程與數學 02-018 C++數據結構與算法 16課題、貪心算法

青少年編程與數學 02-018 C數據結構與算法 16課題、貪心算法 一、貪心算法的基本概念定義組成部分 二、貪心算法的工作原理三、貪心算法的優點四、貪心算法的缺點五、貪心算法的應用實例(一)找零問題問題描述:貪心策略:示例代碼&a…

UE5 Set actor Location和 Set World Location 和 Set Relative Location 的區別

在 Unreal Engine 的藍圖里,SetRelativeLocation、SetWorldLocation 和 SetActorLocation 三個節點雖然都能改變物體位置,但作用對象和坐標空間(Coordinate Space)不同: 1. SetActorLocation 作用對象:整個…

VINS-FUSION:跑通手機錄制數據

文章目錄 📚簡介🚀手機錄制數據🚀跑通數據🔧啟動rviz🔧啟動配置🔧播放rosbag🎯跑通結果 📚簡介 利用智能手機的 攝像頭IMU 采集數據,并在 VINS-Fusion(視覺慣…

Spring AI在大模型領域的趨勢場景題深度解析

Spring AI在大模型領域的趨勢場景題深度解析 在互聯網大廠Java求職者的面試中,經常會被問到關于Spring AI在大模型領域的趨勢場景的相關問題。本文通過一個故事場景來展示這些問題的實際解決方案。 第一輪提問 面試官:馬架構,歡迎來到我們…

MySQL數據庫全面詳解:從基礎到高級應用

一、數據存儲概述 在計算機系統中,數據可以存儲在多種形式中: 變量:程序中最基本的數據存儲單元 元組:不可變的序列類型,常用于函數返回多個值 列表:有序可變集合,可存儲不同類型元素 字典&…

Redux和MobX有什么區別

Redux 和 MobX 都是用于 React 應用的全局狀態管理庫,但它們在設計理念、使用方式和適用場景等方面存在明顯的區別,下面為你詳細分析: 1. 設計理念 Redux:基于 Flux 架構,遵循單向數據流和純函數式編程的理念。狀態是…

WPF實現類似Microsoft Visual Studio2022界面效果及動態生成界面技術

WPF實現類似VS2022界面效果及動態生成界面技術 一、實現類似VS2022界面效果 1. 主窗口布局與主題 <!-- MainWindow.xaml --> <Window x:Class"VsStyleApp.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x…

備份服務器,備份服務器數據有哪些方法可以實現?

服務器承載著企業核心業務數據與關鍵應用&#xff0c;數據丟失或業務中斷可能帶來災難性后果。因此&#xff0c;構建一套科學、可靠的服務器數據備份體系至關重要。當前&#xff0c;服務器數據備份方法可根據技術架構、存儲介質及恢復需求進行多維劃分。根據不同場景、預算和技…

前端基礎——5、CSS border屬性與漸變色(詳解與實戰)

前端基礎——5、CSS border屬性與漸變色詳解 CSS border屬性與漸變色&#xff08;詳解與實戰&#xff09;一、border屬性全面解析1. 基礎三屬性2. 復合寫法3. 高級特性附加.border-style詳解使用示例效果&#xff1a; CSS 漸變終極指南&#xff1a;線性漸變與徑向漸變的深度解析…

企業出海降本:如何將應用從 AWS EC2 快速無縫遷移至DigitalOcean Droplet

企業出海已經成為目前最熱門的趨勢。然而不論你是做跨境電商&#xff0c;還是短劇出海&#xff0c;或處于最熱門的AI 賽道&#xff0c;你都需要使用海外的云主機或GPU云服務。海外一線的云服務平臺盡管覆蓋區域廣泛&#xff0c;但是往往費用成本較高。所以降本始終是企業出海關…

解決Spring Boot多模塊自動配置失效問題

前言 在Spring Boot多模塊項目中&#xff0c;模塊間配置不生效是一個復雜但可解決的問題&#xff0c;尤其涉及自動配置類、依賴沖突、條件注解以及IDE配置。 一、問題背景與場景 1.1 場景描述 假設存在兩個模塊&#xff1a; 模塊A&#xff1a;提供通用配置&#xff08;如跨…

WEBSTORM前端 —— 第2章:CSS —— 第4節:盒子模型

目錄 1.畫盒子 2.Pxcook軟件 3.盒子模型——組成 4.盒子模型 ——邊框線 5.盒子模型——內外邊距 6.盒子模型——尺寸計算 7.清除默認樣式 8.盒子模型——元素溢出 9.外邊距問題 ①合并現象 ②塌陷問題 10.行內元素——內外邊距問題 11.盒子模型——圓角 12.盒子…

Kafka和flume整合

需求1&#xff1a;利用flume監控某目錄中新生成的文件&#xff0c;將監控到的變更數據發送給kafka&#xff0c;kafka將收到的數據打印到控制臺&#xff1a; 在flume/conf下添加.conf文件&#xff0c; vi flume-kafka.conf # 定義 Agent 組件 a1.sourcesr1 a1.sinksk1 a1.c…

Idea 如何配合 grep console過濾并分析文件

這里寫自定義目錄標題 [grep console插件]()右擊打開文件目錄&#xff0c;選擇 tail in console 同時可以添加自己的快捷鍵。 ![新的改變](https://i-blog.csdnimg.cn/direct/03423e27cf6c40c5abd2d53982547b61.png) 隨后會在idea的菜單欄中出現tail菜單。這里&#xff0c;接下…

怎樣學習Electron

學習 Electron 是一個很好的選擇&#xff0c;特別是如果你想構建跨平臺的桌面應用程序&#xff0c;并且已經有前端開發經驗。以下是一個循序漸進的學習指南&#xff0c;幫助你從零開始掌握 Electron。 1. 基礎知識 HTML/CSS/JavaScript 確保你對這些基礎技術有扎實的理解&am…

MySQL 大數據量分頁查詢優化指南

問題分析 當對包含50萬條記錄的edu_test表進行分頁查詢時&#xff0c;發現隨著分頁越深入&#xff0c;查詢時間越長&#xff1a; limit 0,10&#xff1a;0.05秒limit 200000,10&#xff1a;0.14秒limit 499000,10&#xff1a;0.21秒 通過EXPLAIN分析發現&#xff0c;limit o…

【仿真】Ubuntu 22.04 安裝MuJoCo 3.3.2

官方GIthub下載: https://github.com/google-deepmind/mujoco/releases 官網&#xff1a;MuJoCo — Advanced Physics Simulation 文檔&#xff1a;Overview - MuJoCo Documentation 主要參考&#xff1a;Ubuntu 22.04 安裝Mujoco 3.22 - RobotStudent的文章 - 知乎 簡…

最新字節跳動運維云原生面經分享

繼續分享最新的go面經。 今天分享的是組織內部的朋友在字節的go運維工程師崗位的云原生方向的面經&#xff0c;涉及Prometheus、Kubernetes、CI/CD、網絡代理、MySQL主從、Redis哨兵、系統調優及基礎命令行工具等知識點&#xff0c;問題我都整理在下面了 面經詳解 Prometheus …