lightgbm 數據不平衡_不平衡數據下的機器學習(下)

本文從不平衡學習的基礎概念和問題定義出發,介紹了幾類常見的不平衡學習算法和部分研究成果。總體來說,不平衡學習是一個很廣闊的研究領域,但受筆者能力和篇幅的限制,本文僅對其中部分內容做了簡單概述,有興趣深入學習或研究的讀者可以參閱下文所列參考文獻或其他相關資料。來自: 哈工大訊飛聯合實驗室

3.5 不平衡學習算法的實際應用效果對比

上面4小節已經給出了很多針對數據不平衡問題的處理算法,下面將對這些算法的實際應用效果進行對比,本節的所有數據與圖表都來自于Buda, M.等人于2017年發表在Arxiv上的文章《A systematic study of the class imbalance problem in convolutional neural networks》。

28508fbf586dbd8de2ef2d4cab9eb565.png

圖 3.10 數據不平衡的形式。(a)和(b)為階梯性不平衡,(c)為線性不平衡。

在這篇文章中,作者定義了2種數據不平衡的形式:階梯性不平衡和線性不平衡,兩種形式見圖 3.10。評價指標為ROC AUC,實驗了四種不平衡學習算法:

1)隨機過采樣

2)隨機降采樣

3)使用隨機過采樣方法預訓練CNN模型,然后再使用原始數據集對模型最后一層做微調

4)使用隨機降采樣方法預訓練CNN模型,然后再使用原始數據集對模型最后一層做微調

作者在MNIST、CIFAR-10和ImageNet這3個數據集上分別進行了實驗,實驗配置均在下表中列出:

f097c1b79dfda641325240de862c0804.png

3.5.1 在階梯性不平衡數據上的實驗結果

a91d4c2823ff8c2ddc9772be81a93a13.png

圖 3.11 在階梯狀不平衡數據上,隨不平衡比例變化的各個算法的表現。(a)(b)(c)為在MNIST上的結果,(d)(e)(f)為在CIFAR-10上的結果

從圖 3.11中可以看到:相比于簡單任務(MNIST),數據不平衡對CNN在復雜任務(CIFAR-10)上的表現影響更大;隨機過采樣方法在幾乎所有情況下都要優于其他方法。

137d9a8b5e5a22e97aa6c74d4b681af8.png

圖 3.12在階梯狀不平衡數據上,隨少數類數量變化的各個算法的表現。(a)(b)(c)為在MNIST上的結果,(d)(e)(f)為在CIFAR-10上的結果

從圖 3.12中也可以看出:使用隨機過采樣之后效果幾乎始終優于原始的不使用任何不平衡學習算法的效果;預訓練方法的效果始終介于非預訓練方法和原始方法之間。

3.5.2 在線性不平衡數據上的實驗結果

893b56142d84008ebf5054b3545dd478.png

圖 3.13 線性不平衡數據上的實驗效果

從圖 3.13可以看出:隨機過采樣對于實驗效果始終有促進能力;隨機降采樣的效果則會隨著不均衡比例的提升而逐漸下降。

b8b60a7b914feedb0e79fef0aa2aa3d6.png

上表給出了作者在ImageNet上的實驗效果,可以看到,隨機過采樣方法還是始終優于隨機降采樣方法,但要差于不使用任何不平衡學習算法的Baseline方法。因為,我們在將采樣方法應用于復雜任務時,需要格外小心。

3.5.4 過采樣/降采樣比例對實驗結果的影響

8e76154de071988b45feb4e09ccb46e9.png

圖 3.14 過采樣/降采樣比例對實驗結果的影響

從圖 3.14可以看到:隨機過采樣方法會在過采樣到各類別完全均衡的情況下取得較好效果;隨機降采樣方法所需的較佳降采樣比例則隨著數據變化而變化。

3.5.5 對采樣方法泛化能力的研究

32db14cbaeb901caf975d0e3dd5624a1.png

圖 3.15 在CIFAR-10 階梯性不平衡數據集上的實驗結果

圖 3.15比較了不使用任何不平衡學習算法、隨機過采樣和隨機降采樣的泛化能力。從圖中可以看出,對于該任務中使用的CNN模型,隨機過采樣方法可以在測試集上取得最優的分類準確率,并且不會導致更嚴重的過擬合。


4、不平衡學習的成果

上一節給出了不平衡學習算法的分類、幾個經典算法的介紹和性能比較。本節將關注不平衡學習的研究進展,著重介紹兩篇論文:

1)Lin, H.等人2018年發表在ACL上的《Adaptive Scaling for Sparse Detection in Information Extraction》

2)Huang, C.等人2016年發表在CVPR上的《Learning Deep Representation for Imbalanced Classification》

4.1 《Adaptive Scaling for Sparse Detection in Information Extraction》

4.1.1 引言

檢測任務是信息抽取領域非常常見的任務,典型的任務如命名實體識別、關系抽取和事件檢測等。在做檢測任務時,我們可以把待檢測的標簽作為正例,其他標簽作為反例,從而將檢測任務轉換為標準的分類任務。在這種分類任務中,一般使用交叉熵作為損失函數,正例的F值作為評價指標。由于正例(待檢測的標簽)往往非常稀疏,因此這是一個數據不平衡的分類任務。

9fb583d8b6c320c6a1284ec1fc57c738.png

可以看到,在計算F值時,正例和反例并非是等價的,這導致評估指標和優化目標出現了背離。因此在設計模型訓練方法時,需要考慮到這種差異,盡量保證訓練目標與評估指標的一致性。

一種做法是使用cost-sensitive的方法,對不同類別樣本設置不同的損失權重,但在權重的設置上,過去的研究一般是手動設置或者是在大規模數據集上多次實驗搜索得到,這些方法費時費力而且可遷移性較差。論文針對這一問題,提出一種自適應調整權重的算法,稱為Adaptive Scaling。

4.1.2 Adaptive Scaling

Adaptive Scaling算法借鑒了經濟學中的邊際效用理論:指每新增(或減少)一個單位的商品或服務,它對商品或服務的收益增加(或減少)的效用。在分類任務中,將邊際效用理論中的“商品或服務”替換為分類樣本,收益即為評估指標(F值),此時的邊際效用定義為:每新增(或減少)一個分類正確(錯誤)的樣本,它對評估指標F值增加(或減少)的效用。由此,可以使用每個類別對F值的邊際效用作為其重要程度的衡量。

實際計算時,可以將評估指標對TP和TN的偏導值作為正例和反例的邊際效用值。如果是把Accuracy作為目標,計算正例和反例的邊際效用可以得到:

可以看到,當把Accuracy作為目標時,正例和反例的邊際效用始終是恒定而且相等的,如果是將F值作為目標,可以得到:

1a901f6b5d1191d55fe8bbf619535087.png

這樣就得到了能夠自動在訓練過程中調整樣本權重的Adaptive Scaling算法,而且該算法不需要引入任何額外的超參數。相比于傳統的cost-sensitive方法,其特點在于:

1)正例和反例的相對重要程度既與正反例的比例有關,也會受到當前模型的分類能力影響

2)反例的重要性會隨著正例分類準確率的提升而增加

3)反例的重要性也會隨著反例分類準確率的提升而增加

4)當precision比recall更重要時,反例的重要性也會增加

4.1.3 Batch-wise Adaptive Scaling

在訓練神經網絡時,最常用的是batch-wise的方法,如果用TP和TN在當前batch下的預測值作為近似,我們就得到了Batch-wise Adaptive Scaling算法。

具體來說,當前batch下,TP和TN的近似值按照下式計算:

5d4976d70b32e22dde17cb1546351c60.png

再忽略掉PE對結果的影響(比較微弱),得到:

7abaae36cfbaac628a043a5d1abcaad1.png

由此,在每個batch訓練時,首先可以根據前向預測結果估計得到正例和反例的相對權重,然后計算cost-sensitive的交叉熵損失,最后反向傳播更新模型參數。

可以將Batch-wise Adaptive Scaling視為一個插件,運行在前向預測和反向傳播之間,不會影響到前后流程的正常運行。

4.1.4 實驗驗證

9a2382858894a1cc71a87ab5c0356645.png

圖 4.1 實驗效果驗證

論文在事件檢測任務上進行了驗證實驗。測試數據為TAC KBP 2017 Event Nugget Detection Evaluation(LDC2017E55)官方提供的驗證集,包含167篇英文文檔和167篇中文文檔。

圖 4.1給出了多種算法的效果比較,可以看到,Adaptive Scaling(A-Scaling)算法幾乎在各項指標上都達到了State-of-the-Art的效果。

4593c2bcd4c68416c43f4c9b214a8974.png

圖 4.2 穩定性分析

圖 4.2給出了多次實驗下,不同算法結果的穩定性比較,同樣可以看到,Adaptive Scaling算法在穩定性上也要好于傳統的采樣方法或者代價敏感型方法,尤其是在數據不平衡程度更高的中文數據集上,Adaptive Scaling表現明顯更加穩定。


4.2 《Learning Deep Representation for Imbalanced Classification》

4.2.1 引言

計算機視覺領域的很多數據集都存在數據不平衡的問題。例如在人臉識別任務中,正例和反例的數據就極為不平衡。傳統的應對數據不平衡的算法有采樣方法和代價敏感型方法等,這些方法在經典的“淺層”機器學習算法上已經有充分的研究,但在深度學習模型上還缺乏系統的研究。

針對計算機視覺領域的數據不平衡問題,論文提出一種在不平衡數據下的更有效的深度表征并結合kNN做分類的算法:Large Margin Local Embedding (LMLE)-kNN(LMLE-KNN)。該算法包括2個步驟:首先使用CNN模型從不平衡數據集中學習得到每個樣本的深度表征(embedding向量),然后使用改進的k近鄰分類算法對embedding向量分類。

4.2.2 從不平衡數據中學習深度表征

給定一個數據不均衡的計算機視覺數據集,論文希望先對每個樣本學習一個embedding向量表示f(x),學習到的embedding既具有區分性又能不包含本地的類別不均衡。為了實現這一目標,論文首先從不平衡數據中采樣獲取多個五元組,如圖 4.3所示。

c5e144b30ed94328fe525e4483528970.png

圖 4.3 (a)傳統的三元組表示 (b)五元組表示

5d414c611dcac6e8fdbd95129cb80326.png

相比于傳統的三元組方法,這種五元組方法的優勢在于:

1)五元組包括四個距離,這四個距離的大小需要滿足一定的排序關系,這種排序關系可以提供更加豐富的信息和更強的約束。

2)盡管在做五元組采樣時,我們會限制錨樣本的采樣概率分布使得來自少數類和多數類的數量盡量均衡,這種做法與降采樣有些類似。但與降采樣不同的是,由于這個采樣過程會重復很多次,所以實際上并不會有降采樣的信息丟失。

為了滿足五元組四個距離的不等式要求,論文設計了一種三頭的Hinge loss,表示如下:

7350ffd33b9e75545f4a1db667113c94.png

這個損失函數應用了Large Margin的思想,引入3個松弛變量限制了五元組四個距離的3個間隔。

論文使用CNN來生成對每張圖片的深度表征,圖 4.4示意了該CNN的的訓練方法。

11c46f18548df0b0052e9b83fe031a60.png

圖 4.4 CNN模型訓練

訓練時,五元組的五個樣本分別由同一個CNN做編碼,獲得5個embedding向量,然后計算三頭的Hinge loss,最后經過反向傳播更新CNN參數。

fe25a9636eb6c109576702a77adc69c4.png

圖 4.5 整體訓練流程

圖 4.5給出了訓練獲得樣本數據深度表征的整體流程。

4.2.3 kNN不平衡數據分類

使用上一小節訓練的CNN,可以獲得對于數據集中每個樣本的深度表征,在此基礎上,論文設計了一種基于聚類cluster的kNN分類算法,用于做最終的分類。由于這一部分的算法與本文“不平衡學習”的主題沒有關聯,這里不再贅述,有興趣的讀者可以參閱Huang, C.等人的公開論文。

4.2.4 實驗結果

論文在CelebA面部特性識別和BSD500邊緣檢測兩個數據集上進行了實驗,并與State-of-the-Art的方法做了比較。

a079611fd9bfcd76aa60a5a87a3d8403.png

圖 4.6 CelebA上的實驗結果。Imbalance level的值越大,該特性數據的不平衡程度越高;評估指標為balanced accuracy=(TP/P + TN/N)/2。

cfd556b71b37cc59729481f7ee975ae1.png

圖 4.7 隨數據不平衡程度增加的相對性能提升變化

圖 4.6和圖 4.7分別給出了在CelebA數據集上的實驗效果比較和隨數據不平衡程度增加的相對性能提升變化。可以看到,LMLE-kNN的分類效果明顯優于其他State-of-the-Art方法,并且數據不平衡程度越高,LMLE-kNN在效果上的提升更加明顯。

f054efd7a1afd3662b1efe999a8097f1.png

圖 4.8 BSD500上的實驗結果

圖 4.8給出了在BSD500上的實驗結果,LMLE-kNN算法同樣取得了與State-of-the-Art方法相當的效果。需要說明的是,圖中的HFL、HED等方法都使用了大型的VGGNet模型,而LMLE-kNN只使用了一個小型的6層CNN。

62a5d94ad629455160ff965786114250.png

圖 4.9 一個邊緣檢測的例子。從左到右依次為原始圖像、理想結果、Sketch Token、DeepContour和LMLE-kNN的檢測結果

圖 4.9給出了一個具體的邊緣檢測例子,相比于其他算法,LMLE-kNN算法不會受到太多噪聲邊緣的影響。

5、總結

本文從不平衡學習的基礎概念和問題定義出發,介紹了幾類常見的不平衡學習算法和部分研究成果。總體來說,不平衡學習是一個很廣闊的研究領域,但受筆者能力和篇幅的限制,本文僅對其中部分內容做了簡單概述,有興趣深入學習或研究的讀者可以參閱下文所列參考文獻或其他相關資料。

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

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

相關文章

netty實現高性能文件服務器,通用文件服務組件(Netty實現版本)

本文所述文件服務組件在筆者此前一篇文章中已有闡述(基于netty的文件上傳下載組件),不過本文將基于之前這個實現再次進行升級改造,利用基于注解的方式進行自動裝配。1. 簡介1.1 Netty簡介Netty是一個異步事件驅動的網絡應用程序框架,用于快速…

leetcode343. 整數拆分(動態規劃)

給定一個正整數 n,將其拆分為至少兩個正整數的和,并使這些整數的乘積最大化。 返回你可以獲得的最大乘積。 示例 1: 輸入: 2 輸出: 1 解釋: 2 1 1, 1 1 1。 解題思路 組成整數兩個數可以進一步拆分,所以可以運用到動態規劃&#xff0c…

愛前端2018全棧大前端_啟動2018年前端工具調查

愛前端2018全棧大前端by Ashley Watson-Nolan通過阿什利沃森-諾蘭 啟動2018年前端工具調查 (Launching the Front-End Tooling Survey 2018) The Front-End Tooling Survey is back to gather input and shed some light on the tooling habits across the web development in…

PHP 小數點保留兩位【轉】

最近在做統計這一塊內容&#xff0c;接觸關于數字的數據比較多&#xff0c; 用到了三個函數來是 數字保留小數后 N 位&#xff1b; 接下來簡單的介紹一下三個函數&#xff1a; 1、number_format echo number_format("5000000")."<br>"; echo number_…

華為杯數學建模2020獲獎名單_我校在2020年全國大學生數學建模競賽中再獲佳績(內附獲獎名單)...

# 近日&#xff0c;從全國大學生數學建模競賽組委會獲悉&#xff0c;我校在2020年全國大學生數學建模競賽中獲得5項國家二等獎。國家獎獲獎數量在全國農林院校中并列排名第二。在黑龍江省高校中位居第三名。1你的喜悅&#xff0c;我們的欣慰# 2020年全國大學生數學建模競賽于9月…

Python 面試總結

公司面試&#xff1a; 1&#xff0c;說說項目都用到了什么技術&#xff1f; 2&#xff0c;mysql索引的種類&#xff1f; 3&#xff0c;索引建多有什么不好&#xff1f; 4&#xff0c;mysql的引擎有什么&#xff1f; 5&#xff0c;redis是單線程還是多線程的? 6, redis的持久化…

醫療器械監管系統總結

算算時間畢業也兩個多月了&#xff0c;心也慢慢塌下來了&#xff0c;少了些許的浮躁&#xff0c;增加了些許的淡定&#xff0c;同時也添加了一些不好的習氣&#xff0c;“混”&#xff0c;混日子的混&#xff0c;生活慢慢的缺少了激情&#xff0c;伴隨著和她漸漸的疏遠。昨天聽…

fn映射 mac 鍵盤_【新鮮評測】高顏值、低延遲、多模式跨平臺辦公神器-米物藍牙鍵盤...

首先&#xff0c;要例行感謝糖紙眾測&#xff0c;感謝麻麻醬給我這次評測機會。大家可以微信搜索【糖紙】小程序免費體驗更多科技產品。小米旗下生態鏈公司米物最近出了一款藍牙雙模鍵盤&#xff0c;它作為一個85全鍵鍵盤&#xff0c;可以完成藍牙和USB轉換&#xff0c;以及PC和…

leetcode413. 等差數列劃分(動態規劃)

數組 A 包含 N 個數&#xff0c;且索引從0開始。數組 A 的一個子數組劃分為數組 (P, Q)&#xff0c;P 與 Q 是整數且滿足 0<P<Q<N 。 如果滿足以下條件&#xff0c;則稱子數組(P, Q)為等差數組&#xff1a; 元素 A[P], A[p 1], …, A[Q - 1], A[Q] 是等差的。并且 …

(轉發)python3用matplotlib繪圖出現中文亂碼的問題

from pandas import Series,DataFrame import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams[font.sans-serif] [SimHei] 字體的選擇如下&#xff1a; 黑體 SimHei微軟雅黑 Microsoft YaHei微軟正黑體 Microsoft JhengHei新宋體 NSimSun新細明體 PMingLiU細明…

小程序 input 換行_小程序 input雙向數據綁定

小程序 雙向綁定數據&#xff08;單個&#xff09;<小程序 雙向綁定數據&#xff08;多個&#xff09;<

平面設計 前端_我如何在5個月內從平面設計師過渡到前端開發人員

平面設計 前端2017 was a bumpy yet exciting year for me. I left my graphic designer job in March, and entered the maze of the coding world. Five months later, I finally got a job as a front-end developer at Tenten.co.2017年對我來說是坎a而又令人興奮的一年。 …

logstash5.x改變

5.x版本 logstash中 elasticsearch插件的workers&#xff0c;無法配置大于1&#xff0c;會提示 This plugin uses the shared and doesnt need this option 這個的意思是進到logstash本身的配置文件pipeline.output.workers。 不要一開始就修改workers個數。這也許是一個誤區。…

Suricata的初始化腳本

見官網 https://suricata.readthedocs.io/en/latest/initscripts.html

jpa在自己創建表的是字段名不一致_用 數據透視表 完成 Excel多表合并

一般情況下&#xff0c;數據透視表只能匯總一個表格中的數據。即使使用多區域匯總&#xff0c;也只能對多表的單列內容進行數據匯總&#xff0c;而多列卻無法實現。前段時間也推送過Power Query的方法&#xff0c;但它有版本限制。而今天宏興會計培訓小編推送的是一個通用的多表…

python根據數據生成圖像_從三個numpy數組生成圖像數據

首先&#xff0c;您應該運行以下代碼&#xff1a;import numpy as npX np.asarray()Y np.asarray()Z np.asarray()Xu np.unique(X)Yu np.unique(Y)然后您可以應用以下任何一種方法。值得注意的是&#xff0c;即使數據沒有被分類(與目前接受的答案相反)&#xff0c;所有這些…

leetcode120. 三角形最小路徑和(動態規劃)

**給定一個三角形&#xff0c;找出自頂向下的最小路徑和。**每一步只能移動到下一行中相鄰的結點上。 相鄰的結點 在這里指的是 下標 與 上一層結點下標 相同或者等于 上一層結點下標 1 的兩個結點。 例如&#xff0c;給定三角形&#xff1a; [ [2], [3,4], [6,5,7], [4,1,…

Bootstrap教程:學習構建第一個Bootstrap 4網站

快速教程&#xff0c;可幫助您快速掌握最新版本的Bootstrap。 (A quick tutorial to get you up to speed with the latest version of Bootstrap.) In my opinion, the best way to learn a new technology is often to start building stuff from day one. This gives a sens…

使用棧實現隊列 Implement Queue using Stacks

為什么80%的碼農都做不了架構師&#xff1f;>>> 問題&#xff1a; Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of queue.pop() -- Removes the element from in front of queue.peek() -- Get the front…

Java利用POI生成Excel強制換行

前一段時間在做一個學校排課系統時&#xff0c;有一個地方需要利用把課程表生成excel匯出給客戶&#xff0c;由于之前用excel都只是簡單的應用&#xff0c;在單元格里都是用自動換行&#xff0c;而這次可能需要用到手動強制換行。 于是我在網上找了一下&#xff0c;網上找到的文…