关闭

R-xgboost模型

标签: Rxgboost
1378人阅读 评论(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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:113966次
    • 积分:2255
    • 等级:
    • 排名:第16718名
    • 原创:154篇
    • 转载:12篇
    • 译文:0篇
    • 评论:35条
    github地址
    https://github.com/lytforgood
    最新评论