[machine learning] GBDT实现-源码阅读

这次看的源码为ctr预估竞赛Kaggle-criteo Display Advertising Challenge 的参赛队”3 Idiots“ 开源的代码,没记错的话当时应该是第一名,网上直接搜“kaggle-2014-criteo

”就可以查到,其git在https://github.com/guestwalk/kaggle-2014-criteo

在这里只说GBDT的部分,而其整个思路的解析打算专门写一篇,只捡重要的:

(1)要生成树的数据

包括稠密特征和稀疏特征,稠密特征即普通的代表特征值的特征,稀疏特征只保存位置, 有值的地方为1,没值的地方为0, 其将所有的训练数据读进内存,并且对稠密特征按各个特征值进行了由小至大的排序,方便进行左右分支的划分点选择

(2)树最优分支特征的选择

使用方式没有见过,教材上都是说使用GINI系数,在这里未采用可能因为效率问题,这里的方法叫什么不知道,只描述下算法,如果要拟合的值是[y1,y2,y3......yn], 使S=sum(yi^2), 遍历样本,找到划分点,得到[y1, y2...ym], [ym+1, ym+2....yn], 使分割后的S‘=sum(yi^2) + sum(yi'^2) 最大,我想其基本思想是若样本能正确划分,则在划分点左右其拟合值的符合相反,则会有S’最大,而在其余的分割点则均会小于S‘

(3)对稠密特征

稠密特征即按照上述思路,对某个节点处,属于该节点的样本找到最优的特征,最优的分割点

(4)对稀疏特征

由于稀疏特征只有0和1, 则若进行划分,则只有将0和1分别划一堆,同样按照上述的分支特征选择准则

扫描二维码关注公众号,回复: 2479643 查看本文章

(5)由于树的深度及树的个数有限,没有进行剪枝操作

猜你喜欢

转载自www.cnblogs.com/lidouer/p/9393914.html
今日推荐