機器學習——TF-IDF算法

TF-IDF(Term Frequency-Inverse Document Frequency)是一種廣泛應用于文本挖掘和信息檢索領域的經典加權算法,主要用于評估一個詞語在文檔集合中的重要程度。其核心思想是:一個詞語在文檔中出現的頻率越高,同時在所有文檔中出現的頻率越低,則該詞語對該文檔的區分能力越強。

TF-IDF 的計算公式

TF-IDF(Term Frequency-Inverse Document Frequency)是一種常用的文本特征提取方法,由兩部分組成:

1. 詞頻(TF,Term Frequency)

TF 衡量一個詞在當前文檔中出現的相對頻率,計算公式為:

TF(t,d) = (詞 t 在文檔 d 中出現的次數) / (文檔 d 的總詞數)

應用場景:在一篇關于水果的文檔中,"apple"出現頻率自然比"computer"要高,TF值能反映這種詞頻差異。

示例計算

  • 文檔 d 有 100 個詞
  • 單詞 "apple" 出現 5 次
  • 則 TF("apple", d) = 5 / 100 = 0.05

注意事項

  • 常用對數化或歸一化處理來平滑極端值
  • 短文檔中個別高頻詞可能產生過大的TF值

2. 逆文檔頻率(IDF,Inverse Document Frequency)

IDF 衡量一個詞在整個語料庫中的稀有程度,出現越少的詞權重越高:

IDF(t,D) = log[ (語料庫中文檔總數 N) / (包含詞 t 的文檔數 + 1) ]

改進說明

  • 加1平滑處理(+1)是為了避免某些詞未出現在語料庫中導致分母為0
  • 對數運算(通常以10為底)可以壓縮數值范圍

示例計算

  • 語料庫有1000篇文檔
  • "apple"在100篇文檔中出現過
  • 則 IDF("apple", D) = log(1000 / (100 + 1)) ≈ log(9.90) ≈ 2.30

特殊案例

  • 停用詞(如"the"、"is")幾乎出現在所有文檔中,IDF值會趨近于0
  • 專業術語通常具有較高的IDF值

3. TF-IDF 最終計算

將TF和IDF相乘得到最終權重:

TF-IDF(t,d,D) = TF(t,d) × IDF(t,D)

示例計算

  • TF("apple", d) = 0.05
  • IDF("apple", D) ≈ 2.30
  • 則 TF-IDF("apple", d, D) = 0.05 × 2.30 ≈ 0.115

實際應用注意事項

  1. 語料庫規模會影響IDF值
  2. 不同領域的文檔需要分別計算IDF
  3. 通常會進行歸一化處理(如L2歸一化)
  4. 可以結合停用詞過濾提高效果

變體公式: 一些實現會使用不同的對數底數或調整平滑方式,例如:

  • IDF(t,D) = log[1 + (N/(df(t)+1))]
  • 使用自然對數(ln)代替常用對數(log10)

?TF-IDF 的 Python 實現?

Scikit-learn:?TfidfVectorizer

用途??:將文本轉換為 TF-IDF 特征矩陣,適用于機器學習任務。

核心參數??

參數

類型

默認值

說明

input

str

'content'

輸入類型('filename''file''content'

encoding

str

'utf-8'

文本編碼方式

lowercase

bool

True

是否轉換為小寫

stop_words

str/list

None

停用詞表('english'或自定義列表)

max_features

int

None

最大特征數(按詞頻排序)

ngram_range

tuple

(1, 1)

N-gram 范圍(如?(1, 2)包含 1-gram 和 2-gram)

min_df

int/float

1

忽略詞頻低于此值的詞(整數=次數,浮點數=比例)

max_df

int/float

1.0

忽略詞頻高于此值的詞(整數=次數,浮點數=比例)

norm

str

'l2'

歸一化方式('l1''l2'或?None

use_idf

bool

True

是否啟用 IDF 權重

smooth_idf

bool

True

是否平滑 IDF(避免除零錯誤)

??關鍵方法??

方法

說明

fit(raw_documents)

學習詞匯和 IDF

transform(raw_documents)

將文檔轉換為 TF-IDF 矩陣

fit_transform(raw_documents)

合并?fit和?transform

get_feature_names_out()

獲取詞匯表(Python ≥3.6)

get_stop_words()

獲取停用詞列表

# 導入必要的庫
from sklearn.feature_extraction.text import TfidfVectorizer  # 導入TF-IDF向量化工具
import pandas as pd  # 導入pandas用于數據處理# 讀取文本文件
file = open('task2_1.txt', 'r')  # 打開名為'task2_1.txt'的文本文件
data = file.readlines()  # 讀取文件的所有行,存儲在列表data中# 初始化TF-IDF向量化器
vectorizer = TfidfVectorizer()  # 創建TF-IDF向量化器對象# 計算TF-IDF矩陣
vetft = vectorizer.fit_transform(data)  # 對數據進行擬合和轉換,得到TF-IDF矩陣(稀疏矩陣)
print(vetft)  # 打印TF-IDF矩陣(顯示稀疏矩陣的存儲格式)# 獲取特征詞(詞匯表)
words = vectorizer.get_feature_names_out()  # 獲取所有特征詞(即詞匯表)
print(words)  # 打印特征詞列表# 將TF-IDF矩陣轉換為DataFrame
# vetft.T 轉置矩陣(行變列,列變行)
# .todense() 將稀疏矩陣轉換為稠密矩陣
# index=words 使用特征詞作為行索引
df = pd.DataFrame(vetft.T.todense(), index=words)  # 創建DataFrame,行是特征詞,列是文檔
print(df, end='\n')  # 打印DataFrame# 提取特定文檔(第6列,索引為5)的TF-IDF特征
features = df.iloc[:, 5]  # 獲取第6個文檔的所有特征值(Python從0開始計數)
features.index = words  # 設置索引為特征詞(確保順序一致)
results = features.sort_values()  # 對特征值進行排序(默認升序)
print(results)  # 打印排序后的結果(顯示每個詞在該文檔中的TF-IDF值,按值從小到大排列)

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

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

相關文章

區塊鏈技術原理(9)-什么是以太幣

文章目錄前言什么是加密貨幣?什么是以太幣(ETH)鑄造 ETH燃燒 ETHETH 面額傳輸 ETH查詢 ETH以太幣的經濟模型:發行與流通以太幣與其他代幣的區別以太幣的歷史與市場地位總結前言 以太幣(Ether,簡稱 ETH&…

【Oracle APEX開發小技巧16】交互式網格操作內容根據是否啟用進行隱藏/展示

在日常開發中,有想要根據某一狀態或條件去限制/隱藏對應權限或操作按鈕的情況,于是用簡報模板列表進行展示,并提供以下功能:顯示模板基本信息提供啟用/禁用模板的開關提供編輯模板的入口根據模板狀態顯示不同的操作選項效果展示&a…

AIStarter:全網唯一跨平臺桌面AI管理工具,支持Windows、Mac和Linux一鍵部署

AIStarter作為全網唯一支持Windows、Mac和Linux的桌面AI管理平臺,為開發者提供高效的項目管理、模型插件和工作流共享體驗。最近,熊哥發布了4.1.0版本更新視頻,詳細演示了如何在多平臺上安裝、使用和分享AI項目。本文基于視頻內容&#xff0c…

AP模式/ESP32作為TCP服務端,轉發串口接收的數據給網絡調試助手

此代碼為接收STM32的數據然后直接轉發到網絡調試助手,當有設備連接到esp32軟件熱點時會通過串口發送字符’a’給STM32,當有設備斷開連接時會通過串口發送字符’b’,ESP32的TX:GPIO4, RX:GPIO5ESP32作為TCP服務器地址為192.168.4.1 監聽端口為3333#include <string.h> #in…

kafka 中的Broker 是什么?它在集群中起什么作用?

Kafka中的Broker&#xff1a;集群的核心支柱 在分布式消息系統Apache Kafka中&#xff0c;Broker是構成Kafka集群的核心節點或服務器。 簡單來說&#xff0c;每一個Broker就是運行著Kafka服務的一個實例&#xff0c;多臺Broker共同協作&#xff0c;形成了強大的、可擴展的消息處…

【SOA用于噪聲抑制】光纖DFB激光器中弛豫振蕩噪聲抑制

概述&#xff1a;本章記錄了我們在光纖分布式反饋DFB激光器中使用飽和SOA來降低RIN的工作&#xff0c;以用于低頻傳感器應用。結果表明&#xff0c;放大器的增益動力學允許光纖激光器的弛豫振蕩RO噪聲分量減少30dB。 1 背景到目前為止&#xff0c;我研究了將飽和半導體光放大器…

神經網絡的核心組件解析:從理論到實踐

神經網絡作為深度學習的核心技術&#xff0c;其復雜性常常令人望而卻步。然而&#xff0c;盡管神經網絡的結構、參數和計算過程看似繁瑣&#xff0c;但其核心組件卻是相對簡潔且易于理解的。本文將深入探討神經網絡的四大核心組件——層、模型、損失函數與優化器&#xff0c;并…

Spring Boot項目通過Feign調用三方接口的詳細教程

目錄 一、環境準備 二、啟用Feign客戶端 三、定義Feign客戶端接口 四、定義請求/響應DTO 五、調用Feign客戶端 六、高級配置 1. 添加請求頭&#xff08;如認證&#xff09; 2. 超時配置&#xff08;application.yml&#xff09; 3. 日志配置 七、錯誤處理 自定義錯誤…

ubuntu24.04安裝 bpftool 以及生成 vmlinux.h 文件

文章目錄前言一、apt安裝二、源碼安裝三、生成vmlinux.h參考資料前言 $ cat /etc/os-release PRETTY_NAME"Ubuntu 24.04.2 LTS"$ uname -r 6.14.0-27-generic一、apt安裝 安裝bpftool&#xff1a; $ sudo apt install linux-tools-commonThe following NEW packa…

Pytorch FSDP權重分片保存與合并

注&#xff1a;本文章方法只適用Pytorch FSDP1的模型&#xff0c;且切分策略為SHARDED_STATE_DICT場景。 在使用FSDP訓練模型時&#xff0c;為了節省顯存通常會把模型權重也進行切分&#xff0c;在保存權重時為了加速保存通常每個進程各自保存自己持有的部分權重&#xff0c;避…

IDEA自動生成Mapper、XML和實體文件

1. 引入插件 <build><finalName>demo</finalName><plugins><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.5</version><depe…

單例模式的理解

目錄單例模式1.餓漢式(線程安全)2.懶漢式(通過synchronized修飾獲取實例的方法保證線程安全)3.雙重校驗鎖的方式實現單例模式4.靜態內部類方式實現單例模式【推薦】單例模式 1.餓漢式(線程安全) package 并發的例子.單例模式; // 餓漢式單例模式&#xff08;天然線程安全&…

NLP---IF-IDF案例分析

一案例 - 紅樓夢1首先準備語料庫http://www.dxsxs.com這個網址去下載2 任務一&#xff1a;拆分提取import os import redef split_hongloumeng():# 1. 配置路徑&#xff08;關鍵&#xff1a;根據實際文件位置修改&#xff09; # 腳本所在文件夾&#xff08;自動獲取&#xff0…

LaTeX(排版系統)Texlive(環境)Vscode(編輯器)環境配置與安裝

LaTeX、Texlive 和 Vscode 三者之間的關系&#xff0c;可以把它們理解成語言、工具鏈和編輯器的配合關系。 1.下載Texlive 華為鏡像網站下載 小編這邊下載的是texlive2025.iso最新版的&#xff0c;下載什么版本看自己需求&#xff0c;只要下載后綴未.iso的即可。為避免錯誤&am…

【深入淺出STM32(1)】 GPIO 深度解析:引腳特性、工作模式、速度選型及上下拉電阻詳解

GPIO 深度解析&#xff1a;引腳特性、工作模式、速度選型及上下拉電阻詳解一、GPIO概述二、GPIO的工作模式1、簡述&#xff08;1&#xff09;4種輸入模式&#xff08;2&#xff09;4種輸出模式&#xff08;3&#xff09;4種最大輸出速度2、引腳速度&#xff08;1&#xff09;輸…

第1節 大模型分布式推理基礎與技術體系

前言:為什么分布式推理是大模型時代的核心能力? 當我們談論大模型時,往往首先想到的是訓練階段的千億參數、千卡集群和數月的訓練周期。但對于商業落地而言,推理階段的技術挑戰可能比訓練更復雜。 2025年,某頭部AI公司推出的130B參數模型在單機推理時面臨兩個選擇:要么…

《軟件工程導論》實驗報告一 軟件工程文檔

目 錄 一、實驗目的 二、實驗環境 三、實驗內容與步驟 四、實驗心得 一、實驗目的 1. 理解軟件工程的基本概念&#xff0c;熟悉軟件&#xff0c;軟件生命周期&#xff0c;軟件生存周期過程和軟件生命周期各階段的定義和內容。 2. 了解軟件工程文檔的類別、內容及撰寫軟件工…

基于elk實現分布式日志

1.基本介紹 1.1 什么是分布式日志 在分布式應用中&#xff0c;日志被分散在儲存不同的設備上。如果你管理數十上百臺服務器&#xff0c;你還在使用依次登錄每臺機器的傳統方法查閱日志。這樣是不是感覺很繁瑣和效率低下。所以我們使用集中化的日志管理&#xff0c;分布式日志…

多模態RAG賽題實戰之策略優化--Datawhale AI夏令營

科大訊飛AI大賽&#xff08;多模態RAG方向&#xff09; - Datawhale 項目流程圖 1、升級數據解析方案&#xff1a;從 fitz 到 MinerU PyMuPDF&#xff08;fitz&#xff09;是基于規則的方式提取pdf里面的數據&#xff1b;MinerU是基于深度學習模型通過把PDF內的頁面看成是圖片…

09--解密棧與隊列:數據結構核心原理

1. 棧 1.1. 棧的簡介 棧 是一種 特殊的線性表&#xff0c;具有數據 先進后出 特點。 注意&#xff1a; stack本身 不支持迭代器操作 主要原因是因為stack不支持數據的隨機訪問&#xff0c;必須保證數據先進后出的特點。stack在CPP庫中實現為一種 容器適配器 所謂容器適配器&a…