划分訓練集測試集時 數據泄露的問題


轉自:https://towardsdatascience.com/avoid-data-leakage-split-your-data-before-processing-a7f172632b00

https://towardsdatascience.com/data-splitting-for-model-evaluation-d9545cd04a99

1.數據泄露

數據泄漏是指訓練數據集和測試數據集之間偶然的信息共享。 這種信息共享將給模型一個關於測試數據集的“提示”,並生成看起來最優的評估分數。 然而,由於模型對測試數據擬合過度,無法准確預測未來未見數據集。

一個比較常見的數據泄露的原因:在數據預處理后才進行訓練-測試集的划分

2.例子

給出由於在數據預處理后才進行訓練-測試集的划分,導致數據泄露給測試集的問題。

針對上述訓練集,由列1和列2預測target, 如果先對列進行預處理:

列1中Y的值是通過其中有多少個為1的target來替換,即4/6=0.67;列2是按字母順序編碼。

將前7個樣本作為訓練集,后3個作為測試集,但是從測試集中來看,它能夠期望,2個Y,並且其中有一個target為1,這將導致對模型性能的期望過於樂觀。  

類似地,對於步驟2,第5行的字母' e '被編碼為5,因為它理解完整數據集有' a ', ' b ', ' c '和' d '。 這種信息也會在訓練和測試數據之間泄露。 

2.1解決辦法

在預處理之前將數據集划分,這樣test集以及未見過的數據都會一視同仁地被處理。

先划分:

 

 再預處理:

 

 這樣做的好處是:

  • 降低數據泄露風險
  • 未來看不見的數據將以與測試數據完全相同的方式處理,從而確保模型性能的一致性。  

3.隨機划分數據集存在的問題

3.1 不平衡數據集

如果我們隨機分割一個包含99%負類和1%正類的數據集,會出現什么問題?  

可以通過scikit-learn’s train_test_split()進行分層采樣。

3.2 小數據集(有限的數據集)

使用k折交叉驗證。

 

 3.3 特征工程泄露

也就是上述提到的例子。

3.4 組泄露Group Leakage

主要是針對train和test中有同個人的樣本overlap的情況。

3.5 時序泄露

 

 比如在預測出售的房價時,如果針對數據集隨即划分,那么就忽略了時間的因素,可能會導致模型表現比期望更好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM