【数据竞赛】5行代码检测分布不一致,代码少效果好!
5行代碼系列,是包大人班車日更精選的原理簡單明確,效果立竿見影的機器學習武器庫。
往期:
5行代碼提升GBDT,提升巨大!
5行代碼提升時間序列預測,都有用!
5行代碼實現的對比學習,效果超好!
我們還是用一道題目開場吧!
問題引入
大家都招過外包標注,怎么選出合適的數據是一個技術活。
如果你標的是圖片分類數據集,合適的含義就有兩層。
第一,不一樣的類別。有太多貓貓了,那么再加數據也意義不大了。
第二,有代表性的類別,狗狗照片里面有太多柴犬了,你也得把二哈,薩摩耶,德牧,短腿柯基也弄進去。
怎么解決這個問題,給標注每天選數據呢?
這進入了我們今天的關鍵,分布不一致檢測。他有個洋氣的學術名叫concept drift detection,概念漂移檢測。
傳統的學術派解決這個問題的經典方法,就是用一個分布函數,把歷史的數據擬合出來,然后看看待檢測數據超出置信空間的水平。
以上方法有兩個問題,第一,嚴重依賴于分布函數的先驗。第二,他是無監督的,無監督聽起來就不靠譜。總結起來就是又費勁又受限。
他的應用場景有開頭的新樣本發現,如果你標的意圖識別數據,就是意圖發現。其他應用還有其他的像異常檢測,debias等。
那么今天的主角呼之欲出了,有監督,無先驗。又簡單,又好用。
我以意圖發現為例(找出有可能好友新意圖類別的樣本),幾句話講明白這個方法。
方法原理
已有的數據打上0,待檢測數據打上1,然后樣本拼接,訓練一個lstm。最好做一個5折交叉驗證,然后把驗證概率大于0.9(自己設)的找出來。
他的原理就是用分類器做一個數據來源分類任務。大家都知道,兩個分布重疊的部分,一會兒0,一會兒1,模型就學懵了。
要是數量均衡的話,模型只好給你個0.5敷衍完事。既然模型在重疊的分布上敷衍了事,那我把模型有把握的部分,找出來不就行了嗎?
嗯,有把握的部分就是高置信的部分,你可以相信模型找到了一點不一樣的東西。這些不一樣的東西,才會被他學到。所以過高的置信度樣本,就是我們要找的刺頭。
除了意圖發現,結構化數據可以用這個方法來找出分布不一致的樣本和特征。
怎么做呢?和前面過程一樣,一部分給0,一部分給1。你把分類器換成LightGBM就可以了,他還可以生產特征重要性,在劃分新老數據的時候,他把特征bias的程度,給你打了一個排名。
這是以前我在PAKDD AUTOML競賽中用來處理drift特征的方法。驗證AUC大于0.65的話,特征用時間窗來更新下,刪掉一部分特別飄的。這個方法在工業界上線也挺有意義的。
代碼實現
如果你看懂了前面,基本就不需要看代碼就能實現出來了。核心原理代碼。
df_history['lable']?=?0?#歷史數據 df_now['lable']?=?1?#檢測數據 df_all?=?pd.concat([df_history,df_now]).reset_index(drop=True) model_list,prob?=?model.fit(X=?df_all['feature'],y?=?df_all['lable'],?kfold=True) df_drift = df_all[df_all['prob']>drift_thres]#找到prob>drift_thres的樣本完整的代碼在后臺回復 漂移檢測
最后,會的同學說,這不就是adversial validation嗎?
包大人你又在這水班車日更了。
包大人:哎,你會了不代表所有人都會。班車到站了,打卡上工打灰了。
都看到了這里了,點個關注吧!包大人的精彩班車知識分享。
往期精彩回顧適合初學者入門人工智能的路線及資料下載中國大學慕課《機器學習》(黃海廣主講)機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載本站qq群955171419,加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【数据竞赛】5行代码检测分布不一致,代码少效果好!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python】Python四大内置高阶
- 下一篇: jeecg自定义datagrid封装列表