簡單記錄一下重點內容,待后續(xù)仔細看后補充引几。
參考博客:http://d0evi1.com/xgboost/
主要內容
- 1.設計和建立了一個高度可擴展的end-to-end tree boosting系統(tǒng)
- 2.提出了一種理論正確的加權分位數(shù)略圖過程(theoretically justified weighted quantile sketch procedure)杠园,用于高效地進行預計算
- 3.介紹了一種新的稀疏感知算法(sparsity-aware algorithm)迂猴,用于并行化tree learning
- 4.提出了一種高效的內存感知塊結構(cache-aware block structure),用于核外(out-of-core)tree learning
參考博客:https://blog.csdn.net/taotiezhengfeng/article/details/74858303
與GBDT的主要區(qū)別
- 1.加入了正則化項
- 2.二階泰勒展開品洛,更快收斂
- 3.尋找分割點
優(yōu)化
- 在尋找最佳分割點時嗤疯,考慮傳統(tǒng)的枚舉每個特征的所有可能分割點的貪心法效率太低冤今,xgboost實現(xiàn)了一種近似的算法。大致的思想是根據(jù)百分位法列舉幾個可能成為分割點的候選者身弊,然后從候選者中根據(jù)上面求分割點的公式計算找出最佳的分割點辟汰。
- xgboost考慮了訓練數(shù)據(jù)為稀疏值的情況列敲,可以為缺失值或者指定的值指定分支的默認方向阱佛,這能大大提升算法的效率帖汞,paper提到50倍。
- 特征列排序后以塊的形式存儲在內存中凑术,在迭代中可以重復使用翩蘸;雖然boosting算法迭代必須串行,但是在處理每個特征列時可以做到并行淮逊。
- 按照特征列方式存儲能優(yōu)化尋找最佳的分割點催首,但是當以行計算梯度數(shù)據(jù)時會導致內存的不連續(xù)訪問,嚴重時會導致cache miss泄鹏,降低算法效率郎任。paper中提到,可先將數(shù)據(jù)收集到線程內部的buffer备籽,然后再計算舶治,提高算法的效率。
- xgboost 還考慮了當數(shù)據(jù)量比較大车猬,內存不夠時怎么有效的使用磁盤霉猛,主要是結合多線程、數(shù)據(jù)壓縮珠闰、分片的方法惜浅,盡可能的提高算法的效率。