机器学习建模流程
機(jī)器學(xué)習(xí)實(shí)戰(zhàn)
機(jī)器學(xué)習(xí)三把斧
1.數(shù)據(jù)清洗
1.1缺失值的處理
某一列的特征缺失值達(dá)到40%左右,刪除這個特征值;或者某一個樣本的缺失值過大,那么刪除這個樣本。
而當(dāng)某個特征的缺失值較少的時候,不能刪除這個特征。
建模預(yù)測:把缺失值當(dāng)做模型的預(yù)測值,用預(yù)測的值填充缺失值
多重插補(bǔ):前向填充,后項(xiàng)填充
高維映射:就是把缺失值作為一個新的類,只對分類的變量比較好,在廣告CTR(點(diǎn)擊率)
1.2異常值的處理
異常:真實(shí)的異常,記錄的異常。
真實(shí)的異常:本來就是這個值,只是和其他樣本偏移較大
記錄的異常:本來是10,記錄成100
1.3數(shù)據(jù)分桶
數(shù)據(jù)分桶主要就是連續(xù)數(shù)據(jù)離散化,比如年齡,0-10,10-20,20-30等,然后編號1,2,3
數(shù)據(jù)分桶可能提升樹模型的魯棒性
1.4數(shù)據(jù)的標(biāo)準(zhǔn)化
回歸中標(biāo)準(zhǔn)化使用較多,分類中大部分也使用,但是分類中的決策數(shù)就不需要標(biāo)準(zhǔn)化
2.特征工程
2.1特征構(gòu)造
對時間的處理
比賽中要看訓(xùn)練集和測試集的特征分布是否一致,刪去不一致的特征
2.2特征選擇
可能經(jīng)過特征構(gòu)造后,你的特征變成成百上千,這時候就需要先進(jìn)行特征過濾,用集成學(xué)習(xí)如XGboost等算出每個特征的權(quán)重。
2.3特征工程示例
3.模型調(diào)參
3.1理解模型
調(diào)參的時候首先要理解你使用的模型,了解模型的優(yōu)點(diǎn)和特性,比如線性回歸模型基于標(biāo)簽是高斯分布的
3.2評估性能
評估函數(shù)不同,模型的性能可能不一樣,比如MSE對異常值很敏感,如果A模型誤差為0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,5 ;B模型誤差為1,1,1,1,1,1,1,1,1,1。用MSE判斷A=25.09,B=10。而用MAE,A=5.9,B=10 。
所以如果使用MSE評估,那么就需要特別對異常值進(jìn)行精確的處理。不同的評估函數(shù)重點(diǎn)考慮的方面是不一樣的
有個評估函數(shù)后,接下來就是驗(yàn)證方法,比如交叉驗(yàn)證,留一驗(yàn)證,以及時間序列的切分一個時間段去預(yù)測。交叉驗(yàn)證是目前比較好的驗(yàn)證方式,但是當(dāng)你的數(shù)據(jù)特別大比如幾個G,預(yù)測一次都需要好久,非常需要內(nèi)存的話可以考慮切分驗(yàn)證(80%訓(xùn)練,20評估)。
時間序列樣本是不能做交叉驗(yàn)證和留一驗(yàn)證的,可能會存在數(shù)據(jù)信息的泄露。往往是根據(jù)時間進(jìn)行切分構(gòu)造一個和測試區(qū)間類似的區(qū)間預(yù)測
3.3模型調(diào)參
網(wǎng)格搜索特別花費(fèi)時間,比如按上圖如果是五折交叉驗(yàn)證就需要計算36*5=180次的計算。
4.模型集成
前面的特征工程和模型調(diào)參在比賽過程中會反復(fù)的進(jìn)行,反復(fù)測試。而模型的集成一般是在比賽的后期進(jìn)行
模型融合的基礎(chǔ)是你的單模型要好,
4.1簡單加權(quán)融合
加權(quán)平均時模型的權(quán)重最好不要小于0.1,否則這個模型對整體的融合產(chǎn)生不了什么模型收益。
在線提交的時候分?jǐn)?shù)差不多,但是模型的數(shù)據(jù)差異較大,融合后效果會好(比賽經(jīng)驗(yàn))
4.2boosting/bagging
4.3stacking/blending
把結(jié)果放到另一個簡單模型如線性模型再次進(jìn)行篩選。
4.模型融合示例
以上的適用于數(shù)據(jù)挖掘比賽,和(cv)圖像處理的有所不同
特征工程
1.特征工程介紹
2.類別特征
ID一般不作為特征,以上數(shù)據(jù)已經(jīng)經(jīng)過脫敏
2.1類別編碼
類別編碼一般不直接使用,因?yàn)閞ed,blue,black本身是沒有大小的,變成3,1,2后如果使用的是決策樹,那么可能直接會把>2 的區(qū)分為一類
2.2 One-Hot編碼
使用one-hot編碼可以避免上面引入大小的問題,但是不適用于類別特別多的(如果有100個類)會導(dǎo)致特征分布特別稀疏
2.3 Frequency編碼
Frequency編碼是數(shù)據(jù)競賽中使用最為廣泛的技術(shù),在90%以上的數(shù)據(jù)建模的問題中都可以帶來提升。因?yàn)樵诤芏嗟臅r候,頻率的信息與我們的目標(biāo)變量往往存在有一定關(guān)聯(lián),例如:
- 在音樂推薦問題中,對于樂曲進(jìn)行Frequency編碼可以反映該樂曲的熱度,而熱度高的樂曲往往更受大家的歡迎;
- 在購物推薦問題中,對于商品進(jìn)行Frequency編碼可以反映該商品的熱度,而熱度高的商品大家也更樂于購買;
- 微軟設(shè)備被攻擊概率問題中,預(yù)測設(shè)備受攻擊的概率,那么設(shè)備安裝的軟件是非常重要的信息,此時安裝軟件的count編碼可以反映該軟件的流行度,越流行的產(chǎn)品的受眾越多,那么黑客往往會傾向?qū)Υ祟惍a(chǎn)品進(jìn)行攻擊,這樣黑客往往可以獲得更多的利益
2.4 Target編碼
前面說Label encoder一般不直接用,但是下面這種情況可以使用,年齡段有相對大小的區(qū)分,你可以編碼為1,2,3,4
3.數(shù)值特征
二值化,閾值threshold=n, 小于等于n的數(shù)值轉(zhuǎn)為0, 大于n的數(shù)值轉(zhuǎn)為1
指/對數(shù)變換對決策樹沒有意義,因?yàn)檫M(jìn)行對數(shù)變化后數(shù)據(jù)的相對大小不變,小的還是小,大的還是大
交互特征是靈活性最高的,好的交互特征往往可以對模型起到很大的優(yōu)化(比如020的)
index_ture = (offline_train['Date']-offline_train['Date_received']).apply(lambda x: x.days <= 15) # 反例索引 index_false_1 = (offline_train['Date']-offline_train['Date_received']).apply(lambda x: x.days > 15) index_false_2 = offline_train['Date_received'].notnull() & offline_train['Date'].isnull()3.1數(shù)據(jù)分桶
4.時間特征
模型融合
比賽中常用的模型(基于決策樹的集成學(xué)習(xí))
1.介紹XGBoost模型
XGBoost是2016年由華盛頓大學(xué)陳天奇老師帶領(lǐng)開發(fā)的一個可擴(kuò)展機(jī)器學(xué)習(xí)系統(tǒng)。嚴(yán)格意義上講XGBoost并不是一種模型,而是一個可供用戶輕松解決分類、回歸或排序問題的軟件包。它內(nèi)部實(shí)現(xiàn)了梯度提升樹(GBDT)模型,并對模型中的算法進(jìn)行了諸多優(yōu)化,在取得高精度的同時又保持了極快的速度。
XGBoost相對于GBDT(梯度提升樹)有以下好處
2.參數(shù)設(shè)置
官方文檔
過擬合的時候加大r(gamma)的值
XGBoost的調(diào)用
2.1參數(shù)優(yōu)化
比較費(fèi)時間,一般只在后期進(jìn)行一次,把參數(shù)固定下來
使用方法1
使用方法2
3.LightGBM介紹
硬投票,軟投票
用第一層的訓(xùn)練結(jié)果作為特征,放到第二層(模型四)進(jìn)行訓(xùn)練,
樣本有偏的時候,比如負(fù)樣本:正樣本=10:1
那么,模型可能會更偏向于預(yù)測為負(fù)樣本,這時候就要調(diào)節(jié)閾值,比如0.5改成0.3
總結(jié)
- 上一篇: iOS 录音功能实现
- 下一篇: Oracle 11g的下载与安装