概述
一:xgboost原理
在数据建模中,当我们有数个连续值特征时,Boosting分类器是最常用的非线性分类器方法
将成百上千个准确率较低的模型组合起来,成为一个准确率较高的模型,这个模型会不断的迭代,
每次迭代就会产生一颗新的树,然而当数据集比较大比较复杂的时候,我们可能需要几千次的迭代
这样造成巨大的计算瓶颈,xgboost正是为了解决这个瓶颈问题而提出的,单机它采用多线程来加速树的
构建过程。
在学习xgboost之前必须要熟悉gbdt,gbdt就是boosting方法和cart回归树,通过拟合上一个模型的残差进行学习。
此题直接从需要优化的目标函数说起,这个目标函数总体包括三部分,第一部分就是损失函数l,第二部分f(t)部分就是指的L1、L2正则,constant指的是常数项,xgboost是泰勒展开的三项做了一个近似,最终的目标函数只依赖于一阶和二阶导数。
二:xgboost代码实现例子
这个例子是在手写字的train.csv和test.csv,数据集的形式不是图片,而是将每张图片都转化为了1×784的数组,数组中每一个值对应的是像素点的大小;test中有28000个图像转化后的1×784,所以test集的为28000×784的总数。
# -*- coding=utf-8 -*- import xgboost as xgb import pandas as pd import time import numpy as np now = time.time() dataset=pd.read_csv('./train.csv') train=dataset.iloc[:,1:].values labels=dataset.iloc[:,:1].values tests = pd.read_csv('./test.csv') test=tests.iloc[:,:].values paras={ 'booster':'gbtree', #手写字是0-9,是一个多类的问题,因此采用multisoft多分类器 'objective':'multi:softmax', 'num_class':10, 'gamma':0.05,#树的叶子节点下一个区分的最小损失,越大算法模型越保守 'max_depth':12, 'lambda':450,#L2正则项权重 'subsample':0.4,#采样训练数据,设置为0.5 'colsample_bytree':0.7,#构建树时的采样比率 'min_child_weight':12,#节点的最少特征数 'silent':1, 'eta':0.005,#类似学习率 'seed':700, 'nthread':4,#cpu线程数 } plst=list(paras.items())#超参数放到集合plst中; offset=35000#训练集中数据50000,划分35000用作训练,15000用作验证 num_rounds=500#迭代次数 xgtest=xgb.DMatrix(test)#加载数据可以是numpy的二维数组形式,也可以是xgboost的二进制的缓存文件,加载的数据存储在对象DMatrix中 xgtrain=xgb.DMatrix(train[:offset,:],label=labels[:offset])#将训练集的二维数组加入到里面 xgval=xgb.DMatrix(train[offset:,:],label=labels[offset:])#将验证集的二维数组形式的数据加入到DMatrix对象中 watchlist =[(xgtrain,'train'),(xgval,'val')]#return训练和验证的错误率 model = xgb.train(plst,xgtrain,num_rounds,watchlist,early_stopping_rounds=100) preds=model.predict(xgtest,ntree_limit=model.best_iteration) np.savetxt('submission_xgb_MultiSoftMax.csv',np.c_[range(1,len(test)+1),preds], #np._c[]的作用就是将preds与前面的随机数两两配对,放到一块,看我的csdn整理的用法 delimiter=',',header='ImageId,Label',comments='',fmt='%d') #header标题为ImagerId和label就是列的名字为这俩个,看submission_xgb_MultiSoftMax.csv就都明白了 cost_time=time.time()-now print("end...",'n',"cost time",cost_time,"(s)...")[0] train-merror:0.189971 val-merror:0.191
Multiple eval metrics have been passed: 'val-merror' will be used for early stopping.
Will train until val-merror hasn't improved in 100 rounds.
[1] train-merror:0.180514 val-merror:0.182286
[2] train-merror:0.174029 val-merror:0.176857
[3] train-merror:0.170171 val-merror:0.171429
。。。。
[498] train-merror:0.111514 val-merror:0.117143
[499] train-merror:0.111486 val-merror:0.117143
('end...', 'n', 'cost time', 1021.9334750175476, '(s)...')
经过500次迭代,历时十几分钟结束
输出的结果保存到csv文件中,如下:
ImageId,Label 1,2 2,0 3,9 4,7 5,2 6,7 7,0 8,3 9,0 10,3 11,5 12,7 13,4 14,0 15,4
最后
以上就是笨笨手链为你收集整理的xgboost原理与代码实现实例的全部内容,希望文章能够帮你解决xgboost原理与代码实现实例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复