大資料競賽技術分享

alicelmx發表於2018-11-21

轉載自:https://blog.csdn.net/Bryan__/article/details/51745563


本次分享為筆者在一年半時間裡的關於資料探勘技術在學習和實踐方面的經驗

由於準備時間倉促和水平有限,有誤之處請多多指教



過去的參賽成績





一般從如下4個方面來做深入分析

一套全自動的資料探勘工具應該是所有挖掘者的夢想

git上有人開發了一套自動的流程參考:https://github.com/rhiever/tpot




很多同學不太注重預處理,預處理實際上是相當重要的環節

預處理做好了,後面可以省去不少麻煩事

尤其是資料集的劃分,一般需要準確模擬線上提交,方便快速迭代想法

聚類一般用來過濾異常值,將業務場景細分等作用

預處理參考:http://blog.csdn.net/bryan__/article/details/51228971



特徵工程可以說是整個工程中最為重要的環節

特徵沒做好,引數調到老

著重根據業務場景來構建特徵,注意時間尺度一致,不要使用標籤資訊來統計特徵



使用GBDT和LR可以自動發現組合特徵,省去人工構造



特徵選擇也是重要的一個環節,大量特徵會導致訓練成本較高,甚至模型跑不出來

總體需要注意的是與標籤列相關性高,特徵之間冗餘度低,避免共線性等等

壓縮方法一般對於影像特徵效果可能比較好,一般情況的場景效果可能稍差

時間夠的話用wrapper吧,能找到效果最好的特徵子集,模型自帶的特徵排序效果也非常不錯

特徵選擇資料參考:http://blog.csdn.net/bryan__/article/details/51607215



分類模型裡面,比較常見的是線性模型,決策樹模型,SVM超平面間隔模型,神經網路模型

LR和SVM使用前記得先歸一化,LR取LOG效果也不錯,樹模型不用歸一化

SVM一般使用線性核和高斯核,調參可以使用自動搜尋  核選擇和參賽問題參考:http://blog.csdn.net/bryan__/article/details/51506801

這些不同性質的模型可以用來做後面的模型融合

分類模型簡單使用參考:http://blog.csdn.net/bryan__/article/details/51288953



迴歸模型一般也是這些常見的演算法,L1和L2區別簡單來說是p範數的問題,具體參考:http://blog.csdn.net/bryan__/article/details/51288760


至於規則模型,可以說是難點吧,沒有深入理解業務知識不太好掌握,用好了也是大殺器


推薦演算法一般主要內容是計算相似度過濾,頻繁項挖掘,矩陣分解,圖演算法等等


文字處理的核心是將文字轉換成特徵向量,注意tf-idf得到的詞在不同文件中值不一樣,word2vec得到的詞向量在所有文件都一樣

如何把word2vec得到的向量變成文件的向量呢?一般是簡單採用向量相加然後平均的方法



在現實場景用,資料不平衡是十分常見的問題,一般處理方法是代價敏感,也就是在演算法層面增加小類權重

在資料層面一般是採用過取樣方法,常見的smote處理比較隨意,最好採用我們實驗室的基於粗糙集的研究成果,哈哈~

另外不太推薦複製小類樣本,周志華都說了不能這樣,筆者表示支援


模型融合稍微複雜一點,把握好差異性和多樣性融合

差異性是在演算法層面,比如樹模型和線性模型融合就算是差異性融合

多樣性是指在資料,特徵,引數等方面的多樣性

bagging的優點是減少方差,也就是穩定性好

boosting的優點是減少誤差,也就是更準確

stacking的頂層使用線性融合,資料量小的時候容易導致過擬合

ranking針對AUC優化效果不錯,使用的是樣本的排名來做融合,跟具體得分沒啥關係


模型融合的時候需要注意不同模型結果的相關性

如下列舉了幾種常用的相關性指標,也可以用來做特徵選擇的時候計算相關性

單獨用一種說服力不強,一般是同時跑多個指標來評估相關性

關於如何使用這幾種演算法參考:http://blog.csdn.net/bryan__/article/details/51607215



下面介紹幾種常用的bagging方法,隨機森林是比較常用的樹模型bagging

在樣本,特徵,引數,基分類器上隨機,然後平均


下面這種是我們之前在參加DC一個比賽奪冠時使用的xgboost bagging

主要是在特徵和引數層面的bagging



SVM在處理小樣本分類的時候效能強悍,但是隨著資料量的增加,SVM有可能會跑不出結果

在資料量大的時候,一般可以採用訓練集分解的方式來解決時間複雜度問題

分解為p份時間複雜度降低p倍,當然不能分解太多,不然樣本不夠導致單模型效能欠佳

如果使用bootstrap來取樣的話,那麼會有部分樣本沒被選中,這部分樣本可以用來調參


stacking可能理解稍微困難一些,參考:http://blog.csdn.net/bryan__/article/details/51229032

需要注意的是底層模型儘量不要用同質模型

上層模型一般使用LR、NN等線性模型



乾貨較多,希望可以幫助大家

相關文章