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