前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >xgboost小试

xgboost小试

作者头像
Stanley Sun
发布2019-09-23 15:22:36
1.1K0
发布2019-09-23 15:22:36
举报

1. virtualenv 创建一个虚拟环境

virtualenv xgboost-env
cd xgboost-env

2. 下载代码

git clone --recursive https://github.com/dmlc/xgboost

--recursive : 下载所有关联的包

3. 编译

cd xgboost
make -j4

“-j4”是4核并行的意思

4. 运行demo

cd demo/binary_classification
python mapfeat.py
python mknfold.py agaricus.txt 1
../../xgboost mashroom.conf

查看打印结果

5. 代码解析

demo/binary_classification下是一个根据对蘑菇特征对其是否有毒进行判别对一个demo。数据源来自https://archive.ics.uci.edu/ml/datasets/Mushroom,数据中包括蘑菇对形状、颜色等特征,以及是否有毒的标签。原始数据存放在agaricus-lepiota.data里,内容如下所示。它有23列,其中第一列是标签列,p表示有毒,e表示没有毒。后面的22列是22个特征对应的特征值。

p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u
e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g
e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m
p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u
e,x,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g
e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g
e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m
... ...

agaricus-lepiota.fmap 文件里存放特征映射关系,比如蘑菇头形状(cap-shap)为钟型(bell)的用b表示,圆锥型(conical)的用c表示;蘑菇头颜色(cap-color)为棕色(brown)的用n表示,浅黄色(buff)的用b表示,等等。总共22个特征映射,对应agaricus-lepiota.data里的第1~22列(第0列为标签)。

1. cap-shape:                bell=b,conical=c,convex=x,flat=f,knobbed=k,sunken=s
2. cap-surface:              fibrous=f,grooves=g,scaly=y,smooth=s
3. cap-color:                brown=n,buff=b,cinnamon=c,gray=g,green=r,pink=p,purple=u,red=e,white=w,yellow=y
4. bruises?:                 bruises=t,no=f
5. odor:                     almond=a,anise=l,creosote=c,fishy=y,foul=f, musty=m,none=n,pungent=p,spicy=s
6. gill-attachment:          attached=a,descending=d,free=f,notched=n
7. gill-spacing:             close=c,crowded=w,distant=d
... ...

数据源的详细解释,可以看文件agaricus-lepiota.names。

mapfeat.py: 把原始数据agaricus-lepiota.data转换成LibSVM格式的数据文件的脚本。LibSVM的格式中,每一行表示一个实例。其中第一列是标签(lable)。在二分法里,1表示正样本,0表示负样本。后面每一列都是一个key:value的键值对。如下面所示,第一行的"101"表示编号为101的特征,"1.2"表示该特征的特征值。

1 101:1.2 102:0.03
0 1:2.1 10001:300 10002:400

通过执行下面的命令,把原始数据转换成LibSVM格式,并存放在新生成的agaricus.txt里。

python mapfeat.py

agaricus.txt文件格式如下,第一列的“1”表示正样本(有毒),“0”表示负样本(无毒)。第一行第二列的“3”表示第3个特征,即“cap-shap是否为convex”,“1”表示“是”(原始数据用x表示)。“10”表示第10个特征,即"cap-surface是否为smooth", 1表示是(原始数据用s表示)。以此类推。

1 3:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 124:1
0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
0 1:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
... ...

下面的命令将数据随机分成训练集(agaricus.txt.train)和测试集(agaricus.txt.test)两部分,80%的数据分配给训练集,20%分配给测试集。

python mknfold.py agaricus.txt 1

训练之

../../xgboost mushroom.conf

mushroom.conf里存放训练时的一些配置参数。

程序会打印一些训练过程中的内容,并最终生成模型,叫0002.model。

预测

../../xgboost mushroom.conf task=pred model_in=0002.model

这个命令用0002.model对测试集进行预测,并将预测结果生成到pred.txt文件里。pred.txt的行数与test集中一直,每一行有一个介于[0-1]的值,它表示对该行样本对预测。值越接近与1,则表示越可能为正样本(有毒),越接近于0表示越可能是负样本(无毒)。可以拿预测值与test集中对实际标签对比,看看正确性如何。

保存模型

通过下面命令,可以把模型转换成容易阅读对格式。

../../xgboost mushroom.conf task=dump model_in=0002.model name_dump=dump.raw.txt
../../xgboost mushroom.conf task=dump model_in=0002.model fmap=featmap.txt name_dump=dump.nice.txt

在训练过的模型上继续训练

../../xgboost mushroom.conf model_in=0002.model num_round=2 model_out=continue.model

这个命令会在 0002.mode模型上在进行两轮boost,然后把结果存为continue.model。注意:使用这种方法时,中途不能改变 mushroom.conf 里面的配置。

多线程

如果系统支持多线程,可以增加nthread参数来进行并行计算。比如nthread=10表示10个线程同时计算。

https://xgboost.readthedocs.io/en/latest//get_started/index.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档