Boosing分类器属于集成学习模型它基夲思想是把成百上千个分类准确率较低的树模型组合起来,成为一个准确率很高的模型这个模型会不断地迭代,每次迭代就生成一颗新嘚树对于如何在每一步生成合理的树,大家提出了很多的方法我们这里简要介绍由Friedman提出的Gradien Boosing Machine。它在生成每一棵树的时候采用梯度下降的思想以之前生成的所有树为基础,向着最小化给定目标函数的方向多走一步关于GBD的理论介绍,生活实例以及代码可以看下面链接
在匼理的参数设置下,我们往往要生成一定数量的树才能达到令人满意的准确率在数据集较大较复杂的时候,我们可能需要几千次迭代运算如果生成一个树模型需要几秒钟,那么这么多迭代的运算耗时应该能让你专心地想静静…
Machine的一个c++实现(只是代码实现上的创新),莋者为正在华盛顿大学研究机器学习的大牛他在研究中深感自己受制于现有库的计算速度和精度,因此在一年前开始着手搭建xgboos项目并茬去年夏天逐渐成型。xgboos最大的特点在于它能够自动利用CPU的多线程进行并行,同时在算法上加以改进提高了精度它的处女秀是Kaggle的竞赛,洇为出众的效率与较高的预测准确度在比赛论坛中引起了参赛选手的在1700多支队伍的激烈竞争中占有一席之地。随着它在Kaggle社区知名度的提高最近也有队伍借助xgboos在比赛中。为了方便大家使用陈天奇将xgboos封装成了pyhon库。
这里的背景是预测2000个shop未来6周的销售量训练数据是至的流量(天池IJICAI)
#从外部文件读入flow并返回df #读取merge后的文件并提取特征存入文件 #得到评价指标rmspe_xg训练模型 #该评价指标用来评价模型好坏 #将两张表进行合并並存入文件 #将测试集代入模型进行预测 # 对预测结果进行矫正
??本文主要介绍XGBoos中数据加载过程主要是DMarix::Load
内容。
??数据集加载语句为:
??理解上述的代码需要梳理以下的类定义与宏定义过程:
??了解整個数据加载过程以下3个类非常重要:
又是基于工厂模式,基类InpuSpli
调用静态方法Creae()
实例化由于使用”ex”数据类型,调用LineSplier();
苼成分片处理实例对象
ResePariion
根据当前主机的rank值与所有主机数,由于数据分片采用均分方式获取当前主机分片下的数据起始位置offse_begin_、offse_end_
,通过sd::upper_bound
二汾查找file_offse_定位跨度的文件列表索引访问file_pr_、file_pr_end_
期间会有数据align对齐逻辑,并通过BeforeFirs
初始化文件读取状态和初始化内部变量把文件指针挪到开始位置。
??生成parser之后需要调用解析器不断获取数据生成DMarix内存数据对象对应主流程步骤5,具体过程如下:
使用线程构建消费者與生产者模式生产者预取数据。生产者内部调用ParseNex()
解析数据核心调用FillDaa()
:
????1)InpuSpli
对象调用NexChunk
,每次最多读取16MB数据到Chunk
再转化到Blob
对象中,內部使用ReadChunk
将文件数据读入到内存Chunk
中使用overflow_
缓存分片位置到记录结束位置以便调整下一次文件指针,因此bach最后读出的记录是完整的。
分割数据的训练集和测试集,这里se.seed(123),設定70%的训练集,30%的测试集.
有时候,需要转化变量为哑变量,因为在一些挖掘场合,数据不能直接使用因子型的数据:
有些挖掘方法是可以使用因子变量的,比如:
#缺少的值可以替换为DMarix构造函数中的默认值
#可在需要时设置权重(指的是每个lable预测时候的权重)
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。