生活随笔
收集整理的這篇文章主要介紹了
【机器学习】集成学习知识点总结一
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
集成學習算法概述
嚴格意義上來說,集成學習算法不算是一種機器學習算法,而更像是一種優化手段或策略,它通常是結合多個簡單的弱機器學習算法,去做更可靠的決策。有人把它稱為機器學習中的“屠龍刀”,非常萬能且有效。集成模型是一種能在各種機器學習任務上提高準確率的強有力技術,能夠很好地提升算法的性能。
集成方法是由多個較弱的模型集成組成,一般弱分類器可以是決策樹,SVM,KNN等構成。其中的模型可以單獨進行訓練,并且它們的預測能以某種方式結合起來去做出一個總體預測。該算法主要的問題是要找出哪些較弱的模型可以結合起來,以及如何結合的方法。
集成學習的主要框架
集成學習從集成思想的架構分為Bagging,Boosting,Stacking三種。
Bagging:基于數據隨機重抽樣的分類器構建方法。從訓練集中進行子抽樣組成每個基模型所需要的子訓練集,對所有基模型預測的結果進行綜合從而產生最終的預測結果。
Boosting:訓練過程為階梯狀,基模型按次序一一進行訓練(實現上可以做到一定程度上的并行),基模型的訓練集按照某種策略每次都進行一定的轉化(根據具體的方法不同,轉化的方法不一樣,如Adaboost為更改權重,GBDT為擬合殘差(梯度)),最后對所有基模型預測的結果進行線性組合產生最終的預測結果。
Stacking:將訓練好的所有基模型對訓練集進行預測,第j個基模型對第i個訓練樣本的預測值將作為新的訓練集中第i個樣本的第j個特征值,最后基于新的訓練集進行訓練。同理,預測的過程也要先經過所有基模型的預測形成新的測試集,最后在對測試集進行預測。(移步集成學習之stacking)
模型收到低偏差和高方差問題的困擾,應該如何解決
低偏差意味著模型的預測值接近實際值。換句話說,該模型有足夠的靈活性,以模仿訓練所有數據的分布。貌似很好,但是別忘了,一個過于靈活的模型是沒有泛化能力的。這意味著,當這個模型用在對一個未曾見過的數據集進行測試的時候,它會令人很失望。
在這種情況下,我們可以使用bagging算法(如隨機森林),以解決高方差問題。
bagging算法采用bootstrapping抽樣策略,把數據集分成重復隨機取樣形成的子集。然后,這些樣本利用單個學習算法生成一組模型。接著,利用投票(分類)或平均(回歸)把模型預測結合在一起。
另外,為了應對高方差問題,還可以做一些其他的操作:
加入正則懲罰。對樹進行剪枝使用可變重要性圖表中的前n個特征。
其實防止過擬合的small trick還有許多,主要可以從數據集與模型兩個角度出發。今后會作總結。
隨機森林的隨機性
- 每棵樹的訓練樣本是隨機的。
- 每棵樹的訓練特征集合也是隨機從所有特征中抽取的。
隨機森林為什么不容易過擬合
隨機森林由很多樹組合在一起,單看每一棵樹都可以是過擬合的,但是,既然是過擬合,就會擬合到非常小的細節上,因此隨機森林通過引入隨機性,讓每一棵樹擬合的細節不同,這時再把這些樹組合在一起,過擬合的部分就會自動被消除掉。
所以隨機森林不容易過擬合,但這不是絕對的,隨機森林也是有可能出現過擬合的現象,只是出現的概率相對低。
就好比人類社會,有計算機的專家,也有神經生物學的專家,還有一個天文學的專家,這就像三顆過擬合的樹,對于各自領域性能都很優秀,但對于宗教這類知識,三個人都不是很懂。由于三個人都處在同一個社會中,在社會中長久下來也有或多或少的接觸過這方面的知識,于是三個人可以通過綜合判斷,得出宗教方面的一些正確答案。
當在隨機森林中,如果我們用了遠大于需求個數的樹,就會發生過擬合的現象。所以一般在構建隨機森林時我們會使用oob袋外錯誤率來修正模型的結構。
使用隨機森林去彌補特征向量中的缺失值
對于訓練集中的缺失值,可以使用均值,0等方式進行預填充,然后使用隨機森林分類,同一個分類下的數據,更新缺失值,如果是分類變量缺失,用眾數補上,如果是連續型變量缺失,用中位數補上,然后再次使用隨機森林分類更新缺失值,4-6輪后可以達到一個比較好的效果。
使用隨機森林對特征重要性進行評估
詳見集成學習ensemble之隨機森林。利用了袋外錯誤率OOB來做決策。
隨機森林算法訓練時主要需要調整哪些參數
n_estimators:隨機森林建立子樹的數量。較多的子樹一般可以讓模型有更好的性能,但同時會讓代碼變慢,嚴重的時候甚至還會導致過擬合!故需要通過交叉驗證或者袋外錯誤率oob估計來選擇最佳的隨機森林子樹數量。max_features:隨機森林允許單個決策樹使用特征的最大數量。增加max_features一般能提高模型的性能,因為在每個樹節點上,我們有更多的選擇可以考慮。然而,這未必完全是對的,因為它降低了單個樹的多樣性(泛化能力),但這正是隨機森林的一大特點。可以肯定的是,增加max_features會降低算法的速度,同時還會使得模型更加容易過擬合,因此,我們需要適當的平衡和選擇最佳的max_features。max_depth:決策樹的最大深度。隨機森林默認在決策樹的建立過程中不會限制其深度,這也是隨機森林的一大特點,其不必擔心單棵樹的過擬合。min_samples_split:內部節點再劃分所需要的最小樣本數。如果某節點的樣本數少于min_samples_split,則不會繼續再嘗試選擇最優特征來進行劃分。min_samples_leaf:葉子節點最少樣本數。這個值限制了葉子節點最少的樣本數,如果某葉子節點數目小于樣本數,則會和兄弟節點一起被剪枝。max_leaf_nodes:最大葉子節點數。通過限制最大葉子節點數,可以防止過擬合,默認是“None”,即不限制最大的葉子節點數。如果加了限制,算法會建立在最大葉子節點數內最優的決策樹。min_impurity_split:節點劃分最小不純度。這個值限制了決策樹的增長,如果某節點的不純度(基于基尼系數,均方差,信息增益等)小于這個閾值,則該節點不再生成子節點。即為葉子節點。一般不推薦改動,默認值為1e-7。
概括一下,別看有整整7點,其實后5點全都是預剪枝的策略,在隨機森林中,如果實在是為了防止過擬合等,可以采取預剪枝策略也就是上述的3-7方法。但對于隨機森林這個模型而言,真正要調整的參數就n_estimators和max_features兩個,而且在一般情況下,不需要怎么調就可以得到不錯的結果。
隨機森林為什么不能用全樣本去訓練m顆決策樹
全樣本訓練忽視了局部樣本的規律(各個決策樹趨于相同),對于模型的泛化能力是有害的,使隨機森林算法在樣本層面失去了隨機性。
隨機森林算法的優缺點
優點:
訓練可以高度并行化且性能普遍較好,對于大數據時代的大樣本訓練速度有優勢。隨機森林對于高維數據集的處理能力令人興奮,它可以處理成千上萬的輸入變量,并確定最重要的變量,因此被認為是一個不錯的降維方法。此外,該模型能夠輸出變量的重要性程度,這是一個非常便利的功能!在對缺失數據進行估計時,隨機森林是一個十分有效的方法。就算存在大量的數據缺失,隨機森林也能較好地保持精確性,一方面因為隨機森林隨機選取樣本和特征,另一方面因為它可以繼承決策樹對缺失數據的處理方式。如果缺失數據的樣本只是少量,隨機森林甚至可以幫助去估計缺失值。由于采用了隨機采樣,訓練出的模型的方差小,對generlization error(泛化誤差)使用的是無偏估計模型,泛化能力強。對于不平衡數據集來說,隨機森林可以平衡誤差。當存在分類不平衡的情況時,隨機森林能提供平衡數據集誤差的有效方法。(對正類和反類分別進行重采樣或欠采樣, 之后采用多數投票的方法進行集成學習。或者不做采樣,調整類別的判定閾值。)隨機森林能夠解決分類與回歸兩種類型的問題,并在這兩方面都有相當好的估計表現。(雖然RF能做回歸問題,但通常都用RF來解決分類問題)。
缺點:
隨機森林在解決回歸問題時,并沒有像它在分類中表現的那么好,這是因為它并不能給出一個連續的輸出。當進行回歸時,隨機森林不能夠做出超越訓練集數據范圍的預測,這可能導致在某些特定噪聲的數據進行建模時出現過度擬合。(PS:隨機森林已經被證明在某些噪音較大的分類或者回歸問題上會過擬合)。對于許多統計建模者來說,隨機森林給人的感覺就像一個黑盒子,你無法控制模型內部的運行。只能在不同的參數和隨機種子之間進行嘗試。可能有很多相似的決策樹,掩蓋了真實的結果。對于小數據或者低維數據(特征較少的數據),可能不能產生很好的分類(隨機性大大降低了)。(處理高維數據,處理特征遺失數據,處理不平衡數據是隨機森林的長處)。執行數據雖然比boosting等快(隨機森林屬于bagging),但比單只決策樹慢多了,且精度一般不如boosting方法。
Adaboost原理概述
Adaboost分類器就是一種元算法分類器,Adaboost分類器利用同一種基分類器(弱分類器),基于分類器的錯誤率分配不同的權重參數,同時根據每一次基分類器的預測結果對樣本權重進行更新,最后累加加權的預測結果作為輸出。
具體的算法流程請移步集成學習之boosting AdaBoost
Adaboost幾個要點:
- 基本模型的算法流程及推導
- 訓練誤差界的推導
- 二分類場景與多分類場景
- Adaboost回歸模型
Adaboost的優缺點
優點:
Adaboost提供一種框架,在框架內可以使用各種方法構建子分類器。可以使用簡單的弱分類器,不用對特征進行篩選,也不存在過擬合的現象。Adaboost算法不需要弱分類器的先驗知識(如線性回歸假定樣本服從正態分布,LR假定樣本服從伯努利分布),最后得到的強分類器的分類精度依賴于所有弱分類器。無論是應用于人造數據還是真實數據,Adaboost都能顯著的提高學習精度。Adaboost算法不需要預先知道弱分類器的錯誤率上限(只需要確保弱分類器比隨機猜測好上那么一點點就可以),且最后得到的強分類器的分類精度依賴于所有弱分類器的分類精度,可以深挖分類器的能力。Adaboost可以根據弱分類器的反饋,自適應地調整假定的錯誤率,執行的效率高。Adaboost對同一個訓練樣本集訓練不同的弱分類器,按照一定的方法把這些弱分類器集合起來,構造一個分類能力很強的強分類器,即“三個臭皮匠賽過一個諸葛亮”。用作特征選擇,樹模型的Adaboost統計每次弱樹分類器中的特征分裂順序,即可以得到特征的重要性排序。
從上面的幾點中,我們可以總結得到:使用Adaboost模型我們甚至可以不需要腦子,精度高,泛化錯誤率低,對弱分類器沒有限制。
缺點:
AdaBoost迭代次數也就是弱分類器數目不太好設定,可以使用交叉驗證來進行確定。雖說Adaboost不易過擬合,但若迭代次數太多,依舊會導致過擬合,同時模型的訓練速度會大大降低。數據不平衡導致分類精度下降。(其實對于數據不平衡的情況,少有模型(目前沒見到過)可以在不處理樣本的基礎上作出有效的評估。通常的做法都是要對數據集進行一些針對樣本不平衡的處理,boosting模型在進行數據集的處理之后其實效果也還可以。)后面為個人理解:boosting算法是降低偏差,當數據不平衡時容易使得弱分類器對樣本多的那一類過擬合,此時整個模型的精度會降低,而bagging方法則不會有太大影響。對離群點敏感。在Adaboost訓練過程中,Adaboost會使得難于分類樣本的權值呈指數增長,訓練將會過于偏向這類困難的樣本,導致Adaboost算法易受噪聲干擾。
Adaboost與隨機森林算法的異同點
目前 bagging 方法最流行的版本是: 隨機森林(random forest)
選男友:美女選擇擇偶對象的時候,會問幾個閨蜜的建議,最后選擇一個綜合得分最高的或者投票最多的一個作為男朋友。
目前 boosting 方法最流行的版本是: AdaBoost
追女友:3個帥哥追同一個美女,第1個帥哥失敗->(傳授經驗:姓名、家庭情況) 第2個帥哥失敗->(傳授經驗:興趣愛好、性格特點) 第3個帥哥成功。
這兩種算法的相同之處:
都為集成模型,需要訓練多個弱分類器,同時模型的性能都與弱分類器個數的選擇有一定關系。調參都較少,性能都較好,可以快速得到一個baseline。都可以用作特征選擇。
區別:
bagging 中的分類器權重是相等的;而 boosting 中的分類器加權求和,所以權重并不相等,每個權重代表的是其對應分類器在上一輪迭代中的成功度。同時bagging中樣本的權重是一樣的,而Adaboost中樣本的權重會發生變化。bagging 是由不同的分類器(1.數據隨機化 2.特征隨機化)經過訓練,綜合得出的出現最多分類結果;boosting 是通過調整已有分類器錯分的那些數據來獲得新的分類器,得出目前最優的結果。隨機森林對異常值不敏感,Adaboost對異常值(Outlier)敏感。隨機森林模型是降低方差的模型。Boosting模型為降低偏差的模型。
?
總結
以上是生活随笔為你收集整理的【机器学习】集成学习知识点总结一的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。