Kaggle知识点:数据分布不一致的验证
Adversarial Validation
在Kaggle比賽中數據分布一致是阻礙大家上分的點,本篇文章將介紹Adversarial Validation原理和使用方法,并對數據分布不一致的情況給出一些解決案例。
原創文章不易,希望分享、點擊再看和收藏,謝謝!
Adversarial Validation
Kaggle比賽中數據可分為訓練集和測試集,國內比賽可能根據比賽階段劃分多個測試集,由于數據集采樣和分布的原因導致訓練集和線上測試集可能存在分布不一致的情況,也會帶來本地交叉驗證(Cross Validatation, CV)與線上不一致的情況。
Adversarial Validation核心思路是構建一個分類模型,目的是分辨訓練集和測試集的來源,這里假設使用AUC作為分類精度評價函數。
如果分類模型無法分辨樣本(AUC接近0.5),則說明訓練集和測試集數據分布比較一致;
如果分類模型可以很好分辨樣本(AUC接近1),則說明訓練集和測試集數據分布不太一致;
使用Adversarial Validation方法也非常簡單,將訓練集和測試集分別打上不同的標簽然后進行訓練,代碼思路如下:
train = pd.read_csv( 'data/train.csv' ) test = pd.read_csv( 'data/test.csv' )train['TARGET'] = 1 test['TARGET'] = 0data?=?pd.concat((?train,?test?)) x = data.drop( [ 'TARGET', 'ID' ], axis = 1 ) y = data.TARGETfrom?sklearn.cross_validation?import?train_test_split x_train,?x_test,?y_train,?y_test?=?train_test_split(x,?y)在訓練集和測試集分布一致的情況中,構建模型的驗證AUC一般接近0.5,即分類模型無法判別樣本來源:
在訓練集和測試集分布不一致的情況中,構建模型得到的AUC一般接近1,即分類模型可以分辨樣本的來源。此時本地CV和線上就容易出現不止的情況。
數據分布不一致怎么辦?
當使用Adversarial Validation驗證或者手工驗證發現訓練集和測試集分布存在差異時,可以有哪些做法?
假設存在多個訓練集,可以使用Adversarial Validation與測試集分布比較一致的一個訓練集進行訓練;
在IJCAI2018里,數據A是前六天的數據,數據B是第七天上半天的數據;在Ogeek里,數據A有兩百萬數據,數據B只有五萬數據;在聯通個性化推薦比賽,數據A有初賽約70W數據,數據B有復賽約35W數據。
此種情況一般存在于國內的多階段比賽會放出多個訓練集,比較好的方法是選擇與測試集最為相似的一份訓練集(假設為數據B)進行訓練。
當然其他的訓練數據(與測試集不相似,假設為數據A)可以被利用,可以先在數據A上進行預訓練,然后在數據B上進行微調,完成遷移學習(或稱為嫁接學習)。
https://zhuanlan.zhihu.com/p/51901122
假設Adversarial Validation的AUC非常高,可以嘗試使用Adversarial Validation選擇出與測試集比較相似的樣本,構建成為驗證集。
假設數據集可以擴增,則可以使用外部數據來擴增訓練數據,以保證訓練數據與測試數據的一致性。
當然但數據分布不一致的時候,上述情況都需要反復進行嘗試,不同的數據集具體情況不一樣。同時Adversarial Validation也只能給出一些指導建議,具體還是要通過提交來驗證具體思路的正確性。
最后Adversarial Validation也可以用于驗證AB榜shake up的可能性,過擬合CV有風險。Do not trust your local CV!
閱讀鏈接
https://www.kaggle.com/h4211819/adversarial-validation
http://fastml.com/adversarial-validation-part-two/
http://fastml.com/adversarial-validation-part-one/
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊AI基礎下載(pdf更新到25集)本站qq群1003271085,加入微信群請回復“加群”獲取一折本站知識星球優惠券,復制鏈接直接打開:https://t.zsxq.com/yFQV7am喜歡文章,點個在看
總結
以上是生活随笔為你收集整理的Kaggle知识点:数据分布不一致的验证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【经验分享】计算机专业如何自己增加项目经
- 下一篇: 【NLP】Doc2vec原理解析及代码实