这次看的源码为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)由于树的深度及树的个数有限,没有进行剪枝操作