第六课 多算法组合与模型调优
本系列是七月算法機器學習課程筆記
文章目錄
- 1 前序工作流程
- 1.1 數據處理
- 1.2 特征工程
- 1.3 模型選擇
- 1.4 交叉驗證
- 1.5 尋找最佳超參數
- 2 模型優化
- 2.1 模型狀態
- 2.2 模型優化1
- 2.3 模型優化2
- 2.4 模型優化3
- 2.5 模型優化4:模型融合
- 2.5.1 bagging
- 2.5.2 staking
- 2.5.3 adaboost
- 2.5.4 Gradient Boosting Tree
1 前序工作流程
1.1 數據處理
1.2 特征工程
這兩部分在第五課已經說明了。
1.3 模型選擇
在sklearn中有關于算法選擇的路徑圖。但也不是絕對的。
模型選擇有兩種含義。
第一種是:選擇不同算法。
當拿到一個問題先看屬于這4種類型中的哪一種:分類?回歸?聚類?降維?例如搜索結果排序,看上去不是上面的任何一種。繼續想為什么要排序,排序就是把用戶想點的數據放在前面,那就可以將問題看做是分類問題:用戶會點的數據和用戶不會點的數據。當然也可以看做是回歸問題:用戶點擊數據的概率。
此外還要看數據類型:是文本型數據還是數值型數據。例如分類問題中文本型數據推薦使用樸素貝葉斯算法。數值型可以使用K近鄰或者SVM。
第二種是:選擇超參數
這就類似于師哥師姐給你介紹了很多學習方法,當用在你自己的具體情況下,究竟該學習多少小時的英語,該用多少小時學習數學。這是需要考慮的。
1.4 交叉驗證
交叉驗證是用于評估模型超參數的一種方法。
我們將數據集分為訓練集和測試集。測試集用于評估模型,只能使用一次,類比于三年只能參加一次高考。
交叉驗證最常采用的方法是K折交叉驗證。是將訓練集分為k份。每次隨機選擇一份數據用于驗證,其余數據用于訓練。
例如下圖,在給定一組超參數條件下,使用其中1份數據用于評估,4份數據用于訓練。做5次訓練,得到5個模型的評估結果,求其平均值作為該組參數的驗證結果。
1.5 尋找最佳超參數
尋找最佳超參數有幾種方法,常用的是網格搜索交叉驗證GridSearchCV。
網格交叉驗證就是任意參數要做兩兩組合。例如C=[1,10,100],gamma=[0.001,0.0001]。那網格交叉驗證就可以得到6組超參數。每一組超參數交給交叉驗證算法,評估模型效果。
最后選擇模型效果最好的那一組參數作為最終模型的超參數。在訓練集上訓練得到模型作為最終的模型。
此外還有隨機搜索交叉驗證方法。他們只是組合超參數的方式不同。
2 模型優化
2.1 模型狀態
模型的狀態分為:過擬合、欠擬合、合適。
欠擬合是指模型學習能力弱,不能很好的表達數據。表現特征是在訓練集準確率低,在測試集準確率低。
過擬合是指模型學習能力強,學習了噪音數據。表現特征是在訓練集準確率高,在測試集準確率低。
訓練集準確率隨著樣本量的增加而減小。原因是當樣本量小的時候,模型不是學習而是記憶結果。所以隨著樣本量增加,訓練集準確率降低。
測試集準確率隨著樣本量的增加而增加。原因是見到的樣本多了,自然訓練集數據越接近真實世界的數據,能夠正確處理的數據也越來越多。
下圖中的紅線是一條標準線,是理想中想要找到的線。
在實際工作中,不會畫這么麻煩的曲線,時間也不允許。會直接拿數據,看準確率。準確率都低,那基本就是欠擬合。訓練集準確率高,測試集準確率低,過擬合。
2.2 模型優化1
如果發生過擬合:
1 采集更多的數據:增加數據會降低噪音數據的影響
2 增大正則化系數
如果發生欠擬合:
1 找更多的特征
2 減小正則化系數
2.3 模型優化2
如果是線性模型(線性回歸、邏輯回歸、線性SVM),可以分析特征系數。查看絕對值高的特征,看是不是可以做進一步細化,甚至可以做特征組合。
2.4 模型優化3
bad case分析
分析分錯了的樣本,歸類錯誤原因。
分類問題:看是哪個特征的影響大,有沒有共性
回歸問題:哪些樣本預測結果差距大,為什么?
2.5 模型優化4:模型融合
模型融合(model ensemble)
模型融合是一組獨立的模型的組合。如果所有的模型都是同一種算法,稱為base leaner。如果模型算法不同,就稱為component leaner。
為什么這樣是有效的呢?
從統計角度來講,機器學習就是要找到一種從X到y的映射。這個真實的映射是什么誰都不知道。那如果有多個模型來預測學習的話,可能會更接近真實。
從計算角度來講,很多優化函數是沒有全局最優解,找到的是局部最優解。但是初始化參數不同,可能會落到不同的局部。有多個模型求平均,會接近最終想要的優化局部。
模型融合的方式有三種
1 bagging :群眾的力量是偉大的,集體智慧是驚人的。
2 stacking:站在巨人的肩膀上能看得更遠。
3 adboost:一萬小時定律。
2.5.1 bagging
思路:很多時候模型效果不好是因為過擬合了。怎么解決?如果每次只給部分數據,多找幾個模型來做一下,綜合一下他們的答案。
過程:如果用同一個算法,每次取一個子集訓練一個模型。如果是分類問題,將多個模型的結果做vote,如果是回歸問題,將多個模型的結果做平均。如果用不同的算法,用全部數據集訓練模型。如果是分類問題,將多個模型的結果做vote,如果是回歸問題,將多個模型的結果做平均。
2.5.2 staking
stacking學習步驟分2步。將訓練集分為兩部分數據集D1和D2。D1和D2是沒有交集的。
第一步,也就是level0,使用數據集D1,學習到多個模型。例如學習到LR、SVM、DT三種模型。
第二步,也就是level1,使用數據集D2和使用上一步的模型,學習到新的模型,作為最終的模型。這個模型如果是線性模型,那可以理解為是前面模型的線性組合。這個模型也可能是其他模型。
通常情況下stacking這個模型能力會非常強,所以第二層的模型一般使用線性模型,例如LR。
2.5.3 adaboost
思路:模型效果不好是因為不夠努力,要重復迭代和訓練。要多做之前的錯題,每次分配給分錯的樣本更高的權重。用最簡單的分類器疊加。
2.5.4 Gradient Boosting Tree
思路:從殘差中學習
總結:模型融合有三種思路:bagging stacking boosting。
bagging的具體例子是:RandomForest
boosting的具體例子是:Adaboost,GDBT
bagging方式:VotingClassifier、BaggingClassifier、RandomForestClassifier
boosting方式:AdaBoostClassifier
總結
以上是生活随笔為你收集整理的第六课 多算法组合与模型调优的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WordPress博客系统的安全
- 下一篇: (最通俗易懂的)目标跟踪MOSSE、KC