关闭

R-xgboost模型

标签: Rxgboost
2257人阅读 评论(0) 收藏 举报
分类:
R-xgboost模型 是"极端梯度上升"(Extreme Gradient Boosting)的简称

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

install.packages("xgboost")

library(xgboost)
data(agaricus.train, package='xgboost')
data(agaricus.test, package='xgboost')
train <- agaricus.train
test <- agaricus.test
#这份数据需要我们通过一些蘑菇的若干属性判断这个品种是否有毒。数据以1或0来标记某个属性存在与否
#所以样例数据为稀疏矩阵类型
class(train$data)
#xgboost支持稀疏矩阵作为输入
#迭代了两次,可以看到函数输出了每一次迭代模型的误差信息    树的深度2   学习率  两个数据提高模型           二分类
bst <- xgboost(data = train$data, label = train$label, max.depth = 2, eta = 1,nround = 2, objective = "binary:logistic")
#做预测只需要一句话:
pred <- predict(bst, test$data)

xgb.save(bst, ’model.save’)
bst = xgb.load(’model.save’)
pred <- predict(bst, test$data)
做交叉验证的函数参数与训练函数基本一致,只需要在原有参数的基础上设置nfold:
cv.res <- xgb.cv(data = train$data, label = train$label, max.depth = 2, eta = 1, nround = 2, objective = "binary:logistic", nfold = 5)
交叉验证的函数会返回一个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 设置的小一些, 小学习率可以使得后面的学习更加仔细。


分类测试
library(xgboost)
training <-iris
x1=rep(1,50)
x2=rep(2,50)
x3=rep(3,50)
x=c(x1,x2,x3)
d=training[,c(1:4)]
training=data.frame(d,x)
 
ind<-sample(2,nrow(training),replace=TRUE,prob=c(0.7,0.3)) #对数据分成两部分,70%训练数据,30%检测数据
traindata<- training [ind==1,]  #训练集
testdata<- training [ind==2,]  #测试集
traindatax=as.matrix(traindata[,c(1:4)])
traindatay=as.matrix(traindata[,5])
testdatax=as.matrix(testdata[,c(1:4)])
testdatay=as.matrix(testdata[,5])
bst <- xgboost(data = traindatax, label = traindatay, max.depth = 2, eta = 1,nround = 2) #误分3个
bst <- xgboost(data = traindatax, label = traindatay, max.depth = 4, eta = 0.4,nround = 6) #误分3个
bst <- xgboost(data = traindatax, label = traindatay, max.depth = 6, eta = 0.4,nround = 6) #误分2个
pred <- predict(bst, testdatax)
#table(pred, testdatay)
table(round(pred,0), testdatay)



0
0
查看评论

python调参神器hyperopt

Hyperopt库为python中的模型选择和参数优化提供了算法和并行方案。机器学习常见的模型有KNN,SVM,PCA,决策树,GBDT等一系列的算法,但是在实际应用中,我们需要选取合适的模型,并对模型调参,得到一组合适的参数。尤其是在模型的调参阶段,需要花费大量的时间和精力,却又效率低下。但是我们...
  • qq_34139222
  • qq_34139222
  • 2017-03-04 11:28
  • 4712

XGBoost:参数解释

XGBoost参数在运行XGboost之前,必须设置三种类型成熟:general parameters,booster parameters和task parameters: General parameters:参数控制在提升(boosting)过程中使用哪种booster,常用的booster有...
  • zc02051126
  • zc02051126
  • 2015-07-01 17:06
  • 58051

XGboost参数设置

XGBoost参数在运行XGboost之前,必须设置三种类型成熟:general parameters,booster parameters和task parameters:General parameters:参数控制在提升(boosting)过程中使用哪种booster,常用的
  • zzlzzh
  • zzlzzh
  • 2016-03-01 09:38
  • 5349

在R中使用XGBoost算法

来自: https://segmentfault.com/a/1190000004421821 介绍 你知道 XGBoost 算法是一种现在在数据科学竞赛的获胜方案很流行的算法吗? 那么,他比传统的随机森林和神经网络算法强在哪里呢?广义上来说,它在效率,准确性,可行性都更有优势(接下来...
  • qq_26074991
  • qq_26074991
  • 2016-06-22 21:12
  • 1172

在R中安装xgboost包

Xgboost算法很强大,本文教你如何在R中安装Xgboost包> install.packages("xgboost")#安装xgboost包的代码就这一句 package ‘xgboost’ successfully unpacked and MD5 sums chec...
  • oQianLan1
  • oQianLan1
  • 2017-03-09 16:02
  • 1400

R+python︱XGBoost极端梯度上升以及forecastxgb(预测)+xgboost(回归)双案例解读

一、XGBoost来历 xgboost的全称是eXtreme Gradient Boosting。正如其名,它是Gradient Boosting Machine的一个c++实现,作者为正在华盛顿大学研究机器学习的大牛陈天奇。他在研究中深感自己受制于现有库的计算速度和精度,因此在一年前开始着手搭建...
  • sinat_26917383
  • sinat_26917383
  • 2016-09-22 19:17
  • 12668

xgboost原理

文章内容可能会相对比较多,读者可以点击上方目录,直接阅读自己感兴趣的章节。1.序  距离上一次编辑将近10个月,幸得爱可可老师(微博)推荐,访问量陡增。最近毕业论文与xgboost相关,于是重新写一下这篇文章。  关于xgboost的原理网络上的资源很少,大多数还停留在应用层面,本文通过学习陈天奇博...
  • a819825294
  • a819825294
  • 2016-04-21 10:15
  • 101705

R语言xgboost的使用

  • 2016-01-05 10:23
  • 1KB
  • 下载

XGBoost原理介绍------个人理解版

本人第一次写博客,这是篇算法总结的文章,希望能对大家的学习有所帮助。有什么错误之处,还望留言指出,希望能与大家一起进步。 XGBoost全名叫(eXtreme Gradient Boosting)极端梯度提升,经常被用在一些比赛中,其效果显著。它是大规模并行boosted tree的工具,它是目前...
  • huibeng7187
  • huibeng7187
  • 2017-08-26 00:00
  • 873

Boost和AdaBoost算法原理简介

本文主要参考: 1):《AdaBoost分类算法》http://wenku.baidu.com/link?url=udZ32_5hjlVNuqOAhuCEDPpHcQTEwEAxBiPkkPmPSMKqVLEslUXtpWLnX8gfgvfiZirOkJnqSQm1JnTUTM8WaPCaTMA_...
  • whiteinblue
  • whiteinblue
  • 2013-11-08 11:06
  • 9155
    个人资料
    • 访问:198110次
    • 积分:3168
    • 等级:
    • 排名:第12866名
    • 原创:157篇
    • 转载:17篇
    • 译文:0篇
    • 评论:43条
    github地址
    https://github.com/lytforgood
    最新评论