機(jī)器學(xué)習(xí)建模的一般性流程技術(shù)與技巧個人總結(jié)
對過往的算法項(xiàng)目的經(jīng)驗(yàn)總結(jié),不完善腌歉,后續(xù)補(bǔ)充翘盖。
1.業(yè)務(wù)邏輯抽象化
這一步驟需要想清楚、明確三個問題:
1)要針對什么群體阁危;
2)解決什么問題玛痊;
3)哪些方面信息和這個問題是相關(guān)的擂煞;
做三件事:
1)明確模型目標(biāo)对省,包括樣本標(biāo)簽選取和設(shè)計晾捏、評估指標(biāo)選鹊胄痢;
2)初步選定樣本范圍和特征范圍俗批,具體的樣本和特征篩選可在下一步進(jìn)行岁忘;
3)盡量獲取問題對應(yīng)的理論模型(物理模型或財務(wù)模型)
很多問題是存在相關(guān)領(lǐng)域的理論模型的干像,了解理論模型,首先可以幫助選取特征麻汰,其次可以先建立理論模型五鲫,再用機(jī)器學(xué)習(xí)算法對理論模型與實(shí)際數(shù)據(jù)的殘差進(jìn)行預(yù)測位喂,效果會更好乱灵。
2.數(shù)據(jù)處理
數(shù)據(jù)處理并不是嚴(yán)格意義上的流程第二步,在后續(xù)模型優(yōu)化過程中规婆,隨時可能需要根據(jù)模型的表現(xiàn)和存在的問題對數(shù)據(jù)做進(jìn)一步的加工處理抒蚜。
數(shù)據(jù)處理可以做的工作非常多,并且直接影響整個模型的最終的效果通铲,這里不一一例舉颅夺,只取幾個我覺得比較有意思的點(diǎn)蛹稍。
數(shù)據(jù)處理的工作大致可以分為兩個方向唆姐,特征加工和樣本加工;
特征加工:
1)數(shù)據(jù)平滑
數(shù)據(jù)平滑的方法非常多奉芦,總的來說是將某一個特征在樣本上的分布變得更光滑、更連續(xù)烦却,數(shù)據(jù)平滑的目的通常有兩個其爵,減少噪音或規(guī)避概率密度函數(shù)為0的問題摩渺。
對時間序列數(shù)據(jù)摇幻,如果噪聲較多挥萌,可采用移動平均的方法進(jìn)行平滑處理降噪瑞眼;對波動范圍較大且沒有負(fù)值的特征伤疙,可以通過取對數(shù)的方式進(jìn)行平滑徒像,取對數(shù)還可以在一定程度上消除共線性、異方差的問題锯蛀;
在數(shù)據(jù)質(zhì)量有問題的情況下灭衷,也可以反向操作,將數(shù)據(jù)離散化旁涤,通過損失一部分信息為代價提升數(shù)據(jù)質(zhì)量翔曲,如對用戶申報收入的處理;
2)名義變量處理
特征處理:
ONE-HOT編碼劈愚,不贅述瞳遍;
多分類問題標(biāo)簽處理(深度學(xué)習(xí)模型直接用softmax損失函數(shù)完事):
1對1;1對多菌羽;多對多掠械;
1對1:兩兩抽取類別樣本,分別訓(xùn)練模型注祖,最后各個分類器的預(yù)測結(jié)果進(jìn)行投票猾蒂,缺點(diǎn):損失樣本,N個類別需要訓(xùn)練N*(N-1)/2個分類器肚菠;
1對多:N個類別生成N-1個訓(xùn)練集建立N-1個分類器靴庆,每個訓(xùn)練集1類作為正例的時候其它類全部作為反例奢讨,缺點(diǎn):類別數(shù)量多的時候存在類別不平衡問題;
多對多:ECOC編碼,將N個類別做M次劃分飒泻,每次把一部分類別作為正例,一部分類別作為反例,生成M個訓(xùn)練集訓(xùn)練M個分類器聊倔,預(yù)測時通過計算各分類器預(yù)測結(jié)果與各類編碼距離纵潦,距離最小的類別作為最終分類結(jié)果,優(yōu)點(diǎn):可容錯,樣本比例均衡不損失信息,缺點(diǎn):編碼麻煩;
3)異常值與缺失值處理
對線性回歸模型及其變體而言讯赏,這一步很有必要,但是對基于樹的方法不是必須的私爷,因?yàn)闃涞墓?jié)點(diǎn)分叉是個離散的過程割疾。不過時間充分或者要追求極限性能的話還是可以搞一搞拓诸,可以降低過擬合的風(fēng)險倍谜;
4)特征篩選與衍生
現(xiàn)在很多做機(jī)器學(xué)習(xí)的都不太講究這個了褥民,直接把特征丟給模型讓模型去篩選,但是我個人認(rèn)為這一步還是有意義有價值的;特征篩選與衍生可以基于業(yè)務(wù)理解進(jìn)行處理,不贅述,也可交給模型;這里記錄兩個小技巧:
特征篩選:先選用一個簡單的模型法严,如線性回歸模型或logitic模型溯街,基于AIC或BIC,采用前向/后向/逐步的方法選取變量
特征衍生:考慮變量間可能存在相互作用的關(guān)系堤尾,可從已有特征中隨機(jī)抽取兩個變量,取其乘積作為新的特征育特,再采用上述特征篩選的方法快速篩選。
5)樣本稀疏與多重共線性
做映射
樣本處理:
1)數(shù)據(jù)增強(qiáng)
圖像領(lǐng)域的圖像翻轉(zhuǎn)、旋轉(zhuǎn)创倔、位移等鹃骂;半監(jiān)督學(xué)習(xí)(容易有過擬合問題)
2)類別不平衡問題處理
欠采樣:欠采樣會導(dǎo)致信息損失畏线,可采用stacking算法彌補(bǔ)棚壁;或直接bagging投票袖外;
過采樣:容易導(dǎo)致過擬合,可以通過增加擾動緩解
3.模型選擇
根據(jù)數(shù)據(jù)量大小、數(shù)據(jù)特征數(shù)量臭猜、任務(wù)類型選取合適的模型,簡單的問題用簡單的模型處理掖桦,復(fù)雜的問題用復(fù)雜的模型處理原叮,不懂的問題去谷歌目前相關(guān)領(lǐng)域效果最好的模型
4.模型訓(xùn)練與調(diào)參
個人認(rèn)為,大部分機(jī)器學(xué)習(xí)算法調(diào)參奋隶,都是為了解決兩個問題擂送,1.過擬合;2.規(guī)避局部最優(yōu)唯欣;
過擬合問題最常見嘹吨,通用解決方法:加罰,調(diào)整L1罰或L2罰系數(shù)境氢;
如何判斷模型存在過擬合:模型效果在訓(xùn)練集和測試集上存在明顯差異蟀拷;
規(guī)避局部最優(yōu)是因?yàn)闄C(jī)器學(xué)習(xí)優(yōu)化算法基本上都是貪婪策略,容易陷入局部策略萍聊,因此在模型效果得不到提升的時候需要采用一些方法強(qiáng)迫模型跳出當(dāng)前的最優(yōu)解问芬,最典型的例子就是xgboost里面的colsample_bytree, colsample_bylevel, colsample_bynode參數(shù)
此外,可通過grid search寿桨、random search此衅、貝葉斯方法自動調(diào)參
5.模型集成
模型集成不是必須的,但是通常情況下都能略微提升模型的性能
方法:bagging亭螟、stacking
stacking通常要求初級學(xué)習(xí)器的盡可能的不同挡鞍,否則無意義∶接叮可通過采用不同模型作為初級學(xué)習(xí)器匕累,或采用不同訓(xùn)練樣本,或?qū)颖具M(jìn)行隨機(jī)旋轉(zhuǎn)實(shí)現(xiàn)這一點(diǎn)