機器學習(II)--樣本不平衡

現實中,樣本(類別)樣本不平衡(class-imbalance)是一種常見的現象,如:金融欺詐交易檢測,欺詐交易的訂單樣本通常是占總交易數量的極少部分,而且對于有些任務而言少數樣本更為重要。一般地,樣本類別比例(Imbalance Ratio)(多數類vs少數類)嚴重不平衡時,分類算法將開始做出有利于多數類的預測。

一文解決樣本不均衡(全)

數據抽樣

隨機抽樣(random sampling)在機器學習領域,是很常見的做法。例如,將原始數據集隨機分為訓練集和測試集。常用的抽樣方法有無放回抽樣有放回抽樣
針對非平衡的數據集,為了使得模型在這個數據集上學習的效果更加好,通過減少分類中多數類樣本的數量(欠采樣)或者增加分類中少數類樣本的數量(過采樣),來實現樣本均衡。
過采樣(over sampling)和欠采樣(under sampling)也叫做上采樣和下采樣。

SMOTE是一種合成少數類過采樣技術,主要策略為

  1. 首先,對每個少數類樣本 x i \mathbf x_i xi?,從它的最近鄰中隨機選 k k k 個樣本;
  2. 然后,在 x i \mathbf x_i xi?和近鄰樣本之間的連線上隨機選一點作為新合成的少數類樣本。

除了常用的smote之外,還有自適應合成采樣,比如Borderline-SMOTE、Adaptive Synthetic Sampling(ADA-SYN)等,都包含在 imblearn Python 庫中。

數據增強

數據增強(Data Augmentation)是指從原始數據中加工出更多的數據表示,提高原數據的數量和質量,從而提高模型的學習效果。

基于樣本變換的數據增強

  • 單樣本增強:主要用于圖像,比如幾何操作、顏色變換、隨機查出、剪切旋轉等等,可參見imgaug開源庫。
  • 多樣本增強:是指通過組合及轉換多個樣本的方式,比如剛剛提到的smote,還有SamplePairing、Mixup等方法在特征空間內構造已知樣本的鄰域值樣本。

基于深度學習的數據增強
生成模型,如變分自編碼網絡(VAE)和生成生成對抗網絡(GAN),其生成樣本的方法也可以用于數據增強,這種基于網絡合成的方法相比于傳統的數據增強技術雖然過程復雜,但是生成的樣本更加多樣。

損失函數

損失函數層面的主流就是常用的代價敏感(cost-sensitive)學習,為不同的分類錯誤給予不同懲罰力度(權重),在調解類別平衡的同時,也不會增加計算復雜度。即對少數類樣本給更大的權重系數,對多數類樣本給更小的權重系數,通過這種方式可以在一定程度上解決樣本不均衡的問題。

class weight 可以為不同類別的樣本提供不同的權重,少數類的樣本有更高的權重,從而模型可以平衡各類別的學習。如sklearn提供的class_weight參數,可以作為超參調試,避免決策邊界偏重多數類的現象。

OHEM(Online Hard Example Mining)算法的核心是選擇一些難樣本(多樣性和高損失的樣本)作為訓練的樣本,針對性地改善模型學習效果。對于數據的類別不平衡問題,OHEM的針對性更強。
Focal loss的核心思想是在交叉熵損失函數(CE)的基礎上增加了類別的不同權重以及困難(高損失)樣本的權重(如下公式),以改善模型學習效果。

Focal Loss的核心思想是在交叉熵損失函數(CE)的基礎上增加了類別的不同權重以及困難(高損失)樣本的權重,以改善模型學習效果。

對于二元分類問題,交叉熵(cross entropy)損失函數定義為
CE ( p t ) = ? log ? p t \text{CE}(p_t)=-\log p_t CE(pt?)=?logpt?
其中 P t P_t Pt? 為正樣本概率函數,用來簡化公式:
p t = { p if? y = 1 1 ? p otherwise p_t=\begin{cases} p & \text{if } y=1 \\ 1-p & \text{otherwise} \end{cases} pt?={p1?p?if?y=1otherwise?

Focal Loss 函數定義如下:
FL ( p t ) = ? a t ( 1 ? p t ) γ log ? p t \text{FL}(p_t)=-a_t(1-p_t)^{\gamma}\log p_t FL(pt?)=?at?(1?pt?)γlogpt?
其中權重因子 a t a_t at? 根據正負樣本的分布設置,用來平衡損失函數分布
a t = { a if? y = 1 1 ? a otherwise a_t=\begin{cases} a & \text{if } y=1 \\ 1-a & \text{otherwise} \end{cases} at?={a1?a?if?y=1otherwise?

( 1 ? p t ) γ (1-p_t)^{\gamma} (1?pt?)γ 稱為調制因子(modulating factor),

分解開來
FL ( p t ) = a t ( 1 ? p t ) γ CE ( p t ) = { ? a ( 1 ? p ) γ log ? p if? y = 1 ? ( 1 ? a ) p γ log ? ( 1 ? p ) otherwise \text{FL}(p_t)=a_t(1-p_t)^{\gamma}\text{CE}(p_t) =\begin{cases} -a(1-p)^{\gamma}\log p & \text{if }y=1 \\ -(1-a)p^{\gamma}\log(1-p) & \text{otherwise} \end{cases} FL(pt?)=at?(1?pt?)γCE(pt?)={?a(1?p)γlogp?(1?a)pγlog(1?p)?if?y=1otherwise?

調制因子減少了易于分類(概率高)的樣本的貢獻。

  1. p t → 0 p_t\to 0 pt?0 的時候,調制因子趨于1,對于總的loss的貢獻很大。當 p t → 1 p_t\to 1 pt?1的時候,調制因子趨于0,也就是對于總的loss的貢獻很小。
  2. γ = 0 \gamma=0 γ=0 的時候,focal loss就是傳統的交叉熵損失,可以通過調整 γ \gamma γ 實現調制因子的改變。

引用作者的話:當 γ = 2 \gamma=2 γ=2 時,與 CE 相比,分類為 p t = 0.9 p_t = 0.9 pt?=0.9 的示例的損失將降低 100 倍,而當 p t ≈ 0.968 p_t ≈ 0.968 pt?0.968 時,其損失將降低 1000 倍。減少易于分類的示例的損失,可以讓訓練更多地關注難以分類的示例。

focal-loss

模型層面

解決不均衡問題,更為優秀的是基于采樣+集成樹模型等方法,可以在類別不均衡數據上表現良好。采樣+集成學習這類方法簡單來說,通過重復組合少數類樣本與抽樣的同樣數量的多數類樣本,訓練若干的分類器進行集成學習。

EasyEnsemble 是利用模型集成(Ensemble)的方法多次欠采樣。核心思路就是將多數類樣本集隨機分成 N 個子集,且每一個子集樣本與少數類樣本相同,然后分別將各個多數類樣本子集與少數類樣本進行組合,產生多個不同的訓練集,進而訓練多個不同的基分類器,最后bagging集成各基分類器,得到最終模型。

BalanceCascade 是利用增量訓練的思想(Boosting)。核心思路就是在每一輪訓練時都使用多數類與少數類數量上相等的訓練集,然后使用該分類器對全體多數類進行預測,對于那些分類正確的多數類樣本不放回,然后對這個更小的多數類樣本欠采樣產生訓練集,然后進入下一輪迭代繼續降低多數類數量。

通常,在數據集噪聲較小的情況下,可以用BalanceCascade,可以用較少的基分類器數量得到較好的表現(基于串行的集成學習方法,對噪聲敏感容易過擬合)。噪聲大的情況下,可以用EasyEnsemble,基于串行+并行的集成學習方法,bagging多個Adaboost過程可以抵消一些噪聲影響。

評估指標

分類常用的指標precision、recall、F1、混淆矩陣,對于樣本不均衡的不同程度,都會明顯改變這些指標的表現。可以采用AUC、AUPRC(更優)評估模型表現,AUC對樣本的正負樣本比例情況是不敏感。

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

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

相關文章

Linux信號【產生-保存-處理】

目錄 前言: 1、進程信號基本概念 1.1、什么是信號? 1.2、信號的作用 2、鍵盤鍵入 2.1、ctrlc 終止前臺進程 2.1.1、signal 注冊執行動作 3、系統調用 3.1、kill 函數 3.2、模擬實現 myKill 3.3、raise 函數 3.4、abort 函數 4、軟件條件信號…

人工智能福利站,初識人工智能,圖神經網絡學習,第五課

🏆作者簡介,普修羅雙戰士,一直追求不斷學習和成長,在技術的道路上持續探索和實踐。 🏆多年互聯網行業從業經驗,歷任核心研發工程師,項目技術負責人。 🎉歡迎 👍點贊?評論…

nginx設置緩存時間、日志分割、開啟多進程、網頁壓縮、配置防盜鏈

一、設置緩存時間 當網頁數據返回給客戶端后,可針對靜態網頁設置緩存時間,在配置文件內的http段內server段添加location,更改字段expires 1d來實現:避免重復請求,加快訪問速度 第一步:修改主配置文件 #修…

Vulnhub靶機:basic_pentesting_2

一、介紹 運行環境:Virtualbox 攻擊機:kali(10.0.2.4) 靶機:basic_pentesting_2(10.0.2.7) 目標:獲取靶機root權限和flag 靶機下載地址:https://download.vulnhub.c…

如何選擇O2OA(翱途)開發平臺的部署架構?

概述 O2OA(翱途)開發平臺[下稱O2OA開發平臺或者O2OA]支持公有云,私有云和混合云部署,也支持復雜的網絡結構下的分布式部署。本篇主要介紹O2OA(翱途)開發平臺支持的部署環境以及常用的集群部署架構。 軟硬件環境說明 支持的云化平臺: 華為云…

分布式概念:編碼一個簡單分布式系統

分布式系統是由多臺計算機組成的系統,它們通過網絡連接并共同完成任務。以下是一個簡單的分布式系統的編碼示例: 定義系統架構 首先,需要定義系統的架構。包括確定系統中的計算節點、通信機制和任務分配方式等。 編寫計算節點代碼 每個計算節…

算法簡介:遞歸

遞歸 1. 遞歸1.1 基線條件和遞歸條件 2. 棧2.1 調用棧2.2 遞歸調用棧 1. 遞歸 循環和遞歸可以實現相同的功能,如: 循環 def look_for_key(main_box)pile main_box.make_a_pile_to_look_thorugh()while pile is not empty:box pile.grab_a_box()for …

LLM 聊天對話界面chatwebui 增加實時語音tts功能

類似豆包聊天,可以實時語音回復 1、聊天界面 streamlit頁面 參考界面:https://blog.csdn.net/weixin_42357472/article/details/133199866 stream_web.py 2、 增加實時語音tts功能(接入melotts api服務) 參考:https://blog.csdn.net/weixin_42357472/article/detai…

vue3學習 ref和reactive的使用

使用ref聲明一個響應式對象并使用 <script lang"ts" setup> import { ref } from vue; const message ref("HelloWorld") message.value"被修改了啊~~" </script> <template>{{ message }} </template>ref() 接收參數…

Docker容器與虛擬化技術:OpenEuler 使用 docker-compose 部署 LNMP

目錄 一、實驗 1.環境 2.OpenEuler 部署 docker-compose 3.docker-compose 部署 LNMP 二、問題 1.ntpdate未找到命令 2.timedatectl 如何設置時區與時間同步 3.php網頁顯示時區不對 一、實驗 1.環境 &#xff08;1&#xff09;主機 表1 主機 系統架構版本IP備注Lin…

docker啟動容器報錯:ERRO[0000] error waiting for container: context canceled,解決方法

系統環境&#xff1a;ubuntu16.04&#xff0c;已安裝docker 執行命令&#xff1a;sudo docker run -it --privileged --shm-size128g -v /home:/home docker-image /bin/bash 報錯 docker: Error response from daemon: could not select device driver "" with …

Android PMS實戰——Hook技術介紹(十四)

在了解了 PMS 的調用流程之后,都有那些用處呢?首先幫助了解 Android 包管理系統原理,還有就是配合 AMS 通過 Hook 技術,實現熱更新、插件化等功能。 我們可以通過反射獲取到 PackageParser 對象,再反射調用它的 parsePackage() 傳入 apk 路徑完成解析獲取到 Package 對象,…

厚膜電阻與薄膜電阻相比,特點是什么?

厚膜電阻與薄膜電阻是兩種常見的電阻器件&#xff0c;它們之間的特點主要有以下幾個方面&#xff1a; 1. 厚度不同&#xff1a;厚膜電阻的膜層厚度較大&#xff0c;一般在幾微米到幾十微米之間&#xff0c;而薄膜電阻的膜層厚度較薄&#xff0c;一般在幾納米到幾微米之間。 2. …

單片機精進之路-9ds18b20溫度傳感器

ds18b20復位時序圖&#xff0c;先將b20的數據引腳拉低至少480us&#xff0c;然后再將數據引腳拉高15-60us&#xff0c;再去將測傳感器的數據引腳是不是變低電平并保持60-240us&#xff0c;如果是&#xff0c;則說明檢測到溫度傳感器&#xff0c;并正常工作。需要在240us后才能檢…

xss高級靶場

一、環境 XSS Game - Ma Spaghet! | PwnFunction 二、開始闖關 第一關 看看代碼 試一下直接寫 明顯進來了為什么不執行看看官方文檔吧 你不執行那我就更改單標簽去使用唄 ?somebody<img%20src1%20onerror"alert(1)"> 防御&#xff1a; innerText 第二關…

Codeforces Round 930 (Div. 2) (A~B)

比賽&#xff1a;Codeforces Round 930 (Div. 2) (A~B) 目錄&#xff1a;A B A題&#xff1a;Shuffle Party 標簽: 模擬 題目大意 給你一個數組 a1,a2,…,an。最初&#xff0c;每個 1 ≤ i ≤ n都有 ai i&#xff0c;整數 k ≥ 2的運算 swap(k)定義如下&#xff1a; 設 d是…

Python圖像形態學處理:腐蝕、膨脹、禮帽、黑帽……

文章目錄 二值形態學灰度形態學 python圖像處理教程&#xff1a;初步&#x1f4f7;插值變換 最基礎的形態學操作有四個&#xff0c;分別是腐蝕、膨脹、開計算和閉計算&#xff0c;【scipy.ndimage】分別實現了二值數組和灰度數組的這四種運算。而針對灰度圖像&#xff0c;【sc…

Office/WPS 好用的PPT插件-智能選擇布局

軟件介紹 PPT大珩助手是一款全新設計的Office PPT插件&#xff0c;它是一款功能強大且實用的PPT輔助工具&#xff0c;能夠輕松幫助您修改、優化和管理幻燈片。憑借豐富的功能和用戶友好的界面&#xff0c;PPT大珩助手能夠助力您打造出精美而專業的演示文稿。我們致力于為用戶提…

Flutter學習7 - Dart 泛型

1、泛型類 //泛型類 class Cache<T> {final Map<String, T> _cache {};void saveData(String key, T value) {_cache[key] value;}//泛型方法T? getData(String key) {return _cache[key];} }void main() {Cache<int> cache1 Cache();const String name…

NGINX的重寫與反向代理機制解析

目錄 引言 一、重寫功能 &#xff08;一&#xff09;if指令 1.判斷訪問使用的協議 2.判斷文件 &#xff08;二&#xff09;return指令 1.設置返回狀態碼 2.返回指定內容 3.指定URL &#xff08;三&#xff09;set指令 1.手動輸入變量值 2.調用其它變量值為自定義變…