R-xgboost模型(转)

R-xgboost模型 是"极端梯度上升"(Extreme Gradient Boosting)的简称

xgboost: 速度快效果好的boosting模型

 

[plain] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. install.packages("xgboost")  
  2.   
  3. library(xgboost)  
  4. data(agaricus.train, package='xgboost')  
  5. data(agaricus.test, package='xgboost')  
  6. train <- agaricus.train  
  7. test <- agaricus.test  
  8. #这份数据需要我们通过一些蘑菇的若干属性判断这个品种是否有毒。数据以1或0来标记某个属性存在与否  
  9. #所以样例数据为稀疏矩阵类型  
  10. class(train$data)  
  11. #xgboost支持稀疏矩阵作为输入  
  12. #迭代了两次,可以看到函数输出了每一次迭代模型的误差信息    树的深度2   学习率  两个数据提高模型           二分类  
  13. bst <- xgboost(data = train$data, label = train$label, max.depth = 2, eta = 1,nround = 2, objective = "binary:logistic")  
  14. #做预测只需要一句话:  
  15. pred <- predict(bst, test$data)  
  16.   
  17. xgb.save(bst, ’model.save’)  
  18. bst = xgb.load(’model.save’)  
  19. pred <- predict(bst, test$data)  
  20. 做交叉验证的函数参数与训练函数基本一致,只需要在原有参数的基础上设置nfold:  
  21. cv.res <- xgb.cv(data = train$data, label = train$label, max.depth = 2, eta = 1, nround = 2, objective = "binary:logistic", nfold = 5)  
  22. 交叉验证的函数会返回一个data.table类型的结果,方便我们监控训练集和测试集上的表现,从而确定最优的迭代步数。  

 

 

一般参数
silent : 默认值是0。您需要指定0连续打印消息,静默模式1。
booster : 默认值是gbtree。你需要指定要使用的上升模型:gbtree(树)或gblinear(线性函数)。
num_pbuffer : 这是由xgboost自动设置,不需要由用户设定。阅读xgboost文档的更多细节。
num_feature : 这是由xgboost自动设置,不需要由用户设定。
具体参数树状图:


eta:默认值设置为0.3。您需要指定用于更新步长收缩来防止过度拟合。每个提升步骤后,我们可以直接获得新特性的权重。实际上 eta 收缩特征权重的提高过程更为保守。范围是0到1。低η值意味着模型过度拟合更健壮。
gamma:默认值设置为0。您需要指定最小损失减少应进一步划分树的叶节点。
更大,更保守的算法。范围是0到∞。γ越大算法越保守。
max_depth:默认值设置为6。您需要指定一个树的最大深度。参数范围是1到∞。
min_child_weight:默认值设置为1。您需要在子树中指定最小的(海塞)实例权重的和,然后这个构建过程将放弃进一步的分割。在线性回归模式中,在每个节点最少所需实例数量将简单的同时部署。更大,更保守的算法。参数范围是0到∞。
max_delta_step:默认值设置为0。max_delta_step 允许我们估计每棵树的权重。如果该值设置为0,这意味着没有约束。
如果它被设置为一个正值,它可以帮助更新步骤更为保守。通常不需要此参数,但是在逻辑回归中当分类是极为不均衡时需要用到。将其设置为1 - 10的价值可能有助于控制更新。参数范围是0到∞。
subsample: 默认值设置为1。您需要指定训练实例的子样品比。
设置为0.5意味着XGBoost随机收集一半的数据实例来生成树来防止过度拟合。参数范围是0到1。
colsample_bytree : 默认值设置为1。在构建每棵树时,您需要指定列的子样品比。范围是0到1。
线性上升具体参数
lambda and alpha : 这些都是正则化项权重。λ默认值假设是1和α= 0。
lambda_bias : L2正则化项在偏差上的默认值为0。
任务参数
base_score : 默认值设置为0.5。您需要指定初始预测分数作为全局偏差。
objective : 默认值设置为reg:linear。您需要指定你想要的类型的学习者,包括线性回归、逻辑回归、泊松回归等。
eval_metric : 您需要指定验证数据的评估指标,一个默认的指标分配根据客观(rmse回归,错误分类,意味着平均精度等级
seed : 随机数种子,确保重现数据相同的输出。

大 多 数 情 况 下 , 只 需 要 调 节
max_depth,num_round,min_child_weight,eta 就能取得不错的效果
max_depth
gbdt 每颗树的最大深度,树高越深,越容易过拟合。
num_round
gbdt 的棵数,棵数越多,训练误差越小,但是棵数过多容易过拟合。需要同时观察训练 loss 和测试 loss,确定最佳的棵数。
min_child_weight
这个参数默认是 1,是每个叶子里面 h 的和至少是多少,对正负样本不均衡时的 0-1 分类而言,假设 h 在 0.01 附近, min_child_weight 为 1 意味着叶子节点中最少需要包含 100 个样本。这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数值越小,越容易 overfitting。
eta [learning_rate 同义]
shrinkage 参数,用于更新叶子节点权重时,乘以该系数,避免步长过大。参数值越大,越可能无法收敛。把学习率 eta 设置的小一些, 小学习率可以使得后面的学习更加仔细。

 

 

[plain] view plain copy
 
 在CODE上查看代码片派生到我的代码片
    1. 分类测试  
    2. library(xgboost)  
    3. training <-iris  
    4. x1=rep(1,50)  
    5. x2=rep(2,50)  
    6. x3=rep(3,50)  
    7. x=c(x1,x2,x3)  
    8. d=training[,c(1:4)]  
    9. training=data.frame(d,x)  
    10.    
    11. ind<-sample(2,nrow(training),replace=TRUE,prob=c(0.7,0.3)) #对数据分成两部分,70%训练数据,30%检测数据  
    12. traindata<- training [ind==1,]  #训练集  
    13. testdata<- training [ind==2,]  #测试集  
    14. traindatax=as.matrix(traindata[,c(1:4)])  
    15. traindatay=as.matrix(traindata[,5])  
    16. testdatax=as.matrix(testdata[,c(1:4)])  
    17. testdatay=as.matrix(testdata[,5])  
    18. bst <- xgboost(data = traindatax, label = traindatay, max.depth = 2, eta = 1,nround = 2) #误分3个  
    19. bst <- xgboost(data = traindatax, label = traindatay, max.depth = 4, eta = 0.4,nround = 6) #误分3个  
    20. bst <- xgboost(data = traindatax, label = traindatay, max.depth = 6, eta = 0.4,nround = 6) #误分2个  
    21. pred <- predict(bst, testdatax)  
    22. #table(pred, testdatay)  
    23. table(round(pred,0), testdatay)  

转自:http://blog.csdn.net/q383700092/article/details/51546380

 

posted @ 2016-07-25 10:34  payton数据之旅  阅读(1000)  评论(0)    收藏  举报