xgboost、随机森林和逻辑回归的优缺点
轉載自https://www.nowcoder.com/ta/review-ml/review?query=&asc=true&order=&page=99
Xgboost:
優缺點:
1)在尋找最佳分割點時,考慮傳統的枚舉每個特征的所有可能分割點的貪心法效率太低,xgboost實現了一種近似的算法。大致的思想是根據百分位法列舉幾個可能成為分割點的候選者,然后從候選者中根據上面求分割點的公式計算找出最佳的分割點。
2)xgboost考慮了訓練數據為稀疏值的情況,可以為缺失值或者指定的值指定分支的默認方向,這能大大提升算法的效率,paper提到50倍。
3)特征列排序后以塊的形式存儲在內存中,在迭代中可以重復使用;雖然boosting算法迭代必須串行,但是在處理每個特征列時可以做到并行。
4)按照特征列方式存儲能優化尋找最佳的分割點,但是當以行計算梯度數據時會導致內存的不連續訪問,嚴重時會導致cache miss,降低算法效率。paper中提到,可先將數據收集到線程內部的buffer,然后再計算,提高算法的效率。
5)xgboost?還考慮了當數據量比較大,內存不夠時怎么有效的使用磁盤,主要是結合多線程、數據壓縮、分片的方法,盡可能的提高算法的效率。
適用場景:分類回歸問題都可以。
Rf:
優點:
1)表現性能好,與其他算法相比有著很大優勢。
2)隨機森林能處理很高維度的數據(也就是很多特征的數據),并且不用做特征選擇。
3)在訓練完之后,隨機森林能給出哪些特征比較重要。
4)訓練速度快,容易做成并行化方法(訓練時,樹與樹之間是相互獨立的)。
5)在訓練過程中,能夠檢測到feature之間的影響。
6)對于不平衡數據集來說,隨機森林可以平衡誤差。當存在分類不平衡的情況時,隨機森林能提供平衡數據集誤差的有效方法。7)如果有很大一部分的特征遺失,用RF算法仍然可以維持準確度。
8)隨機森林算法有很強的抗干擾能力(具體體現在6,7點)。所以當數據存在大量的數據缺失,用RF也是不錯的。
9)隨機森林抗過擬合能力比較強(雖然理論上說隨機森林不會產生過擬合現象,但是在現實中噪聲是不能忽略的,增加樹雖然能夠減小過擬合,但沒有辦法完全消除過擬合,無論怎么增加樹都不行,再說樹的數目也不可能無限增加的)。
10)隨機森林能夠解決分類與回歸兩種類型的問題,并在這兩方面都有相當好的估計表現。(雖然RF能做回歸問題,但通常都用RF來解決分類問題)。
11)在創建隨機森林時候,對generlization error(泛化誤差)使用的是無偏估計模型,泛化能力強。
缺點:
1)隨機森林在解決回歸問題時,并沒有像它在分類中表現的那么好,這是因為它并不能給出一個連續的輸出。當進行回歸時,隨機森林不能夠做出超越訓練集數據范圍的預測,這可能導致在某些特定噪聲的數據進行建模時出現過度擬合。(PS:隨機森林已經被證明在某些噪音較大的分類或者回歸問題上回過擬合)。
2)對于許多統計建模者來說,隨機森林給人的感覺就像一個黑盒子,你無法控制模型內部的運行。只能在不同的參數和隨機種子之間進行嘗試。
3)可能有很多相似的決策樹,掩蓋了真實的結果。
4)對于小數據或者低維數據(特征較少的數據),可能不能產生很好的分類。(處理高維數據,處理特征遺失數據,處理不平衡數據是隨機森林的長處)。
5)執行數據雖然比boosting等快(隨機森林屬于bagging),但比單只決策樹慢多了。
適用場景:數據維度相對低(幾十維),同時對準確性有較高要求時。因為不需要很多參數調整就可以達到不錯的效果,基本上不知道用什么方法的時候都可以先試一下隨機森林。
Lr:
優點:實現簡單,廣泛的應用于工業問題上;分類時計算量非常小,速度很快,存儲資源低;便利的觀測樣本概率分數;對邏輯回歸而言,多重共線性并不是問題,它可以結合L2正則化來解決該問題。
缺點:當特征空間很大時,邏輯回歸的性能不是很好;容易欠擬合,一般準確度不太高
不能很好地處理大量多類特征或變量;只能處理兩分類問題(在此基礎上衍生出來的softmax可以用于多分類),且必須線性可分;對于非線性特征,需要進行轉換。
適用場景:LR同樣是很多分類算法的基礎組件,它的好處是輸出值自然地落在0到1之間,并且有概率意義。因為它本質上是一個線性的分類器,所以處理不好特征之間相關的情況。雖然效果一般,卻勝在模型清晰,背后的概率學經得住推敲。它擬合出來的參數就代表了每一個特征(feature)對結果的影響。也是一個理解數據的好工具。
總結
以上是生活随笔為你收集整理的xgboost、随机森林和逻辑回归的优缺点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: opengl es 实现旋转的三角形
- 下一篇: 我的秋招之路之c++中static的用法