R --xgboost使用

来源:互联网 发布:nginx if 编辑:程序博客网 时间:2024/05/18 01:18

  最近用xgboost做了个识别二维码的任务(仅仅是识别是或不是,并不解析二维码的内容)。这里记录一下xgboost的使用,免得将来忘记。其实个人感觉xgboost真的是一个很强大的工具,在很多数据挖掘比赛里xgboost受到了众多选手的青睐,因为又快又简单而且不粘人。
  首先是训练数据的准备。

#这里是从硬盘里读取训练数据生成数据框赋给data变量data = read.csv('/Users/coyte/go/src/qrpie/train_data.csv')
#然后是准备训练数据,R的很多模型和包是可以直接用数据框训练的,但是xgboost比较例外,需要先转化为矩阵才可以,我这里列名y是标签数据,这里x是特征,y是标签x = model.matrix(y~.,data)[,-1]y = data$y
#当然你可能需要一部分数据来进行训练,一部分来作为验证集,R里sample函数来满足的,这里num是数据的数量,sample函数会从1:num里抽样,第二个函数是抽样的数量,我这里是总量的三分之二num = length(data[,1])train = sample(1:num,(num/3)*2)
#生成训练数据和验证数据train_data = data[train,]test_data = data[-train,]
#下边代码就是xgboost的训练函数了,data和label就是数据和标签,我这里用了训练集来训练#nrounds = 2代表gbdt算法迭代的次数,也就是树的棵树,这个值越大,拟合能力越强,当然也容易过拟合#objective = "binary:logistic" 这个参数代表我的任务是二分类任务#max_depth 代表树的最大深度,深度越大,拟合能力越强#eta =1 代表学习率,这个值越大,模型学习的越快,#eval_metric="auc" 设置评价指标,由于我的是二分类任务,所以选择用auc来评价模型的好坏xgb.fit = xgboost(data = x[train,], label =  y[train], nrounds = 2 ,                  objective = "binary:logistic",max_depth = 2, eta = 1,eval_metric ="auc")
#当然也可以用交叉验证的方式来训练模型,参数的含义跟上述的一样,nfold代表划分数据的数量。cv.fit = xgb.cv(max_depth = 2, eta = 1 ,data = x[train,],                 label =  y[train], metrics = "auc", nfold = 10,                 nrounds = 50,objective = "binary:logistic")
#predict是预测函数,在二分类中,返回的是一个0-1之间的概率值xgb.probs = predict(xgb.fit , x[-train,])#hist(xgb.probs)画出xgb.probs的概率频率分布hist(xgb.probs)这样就方便设置预测的阈值了

这里写图片描述

#下列几行代码分别是通过0.2这个概率阈值来设定预测结果,以及计算真正数,精确率和召回率xgb.pred = xgb.probs>0.2tp = sum(y[-train]==1&xgb.pred==1)precision = tp/sum(xgb.pred)recall = tp/sum(y[-train])
#模型分析#画出决策树图xgb.plot.tree(colnames(data)[-903],model = xgb.fit)#打印特征的重要程度xgb.importance(colnames(data),model=xgb.fit)#返回决策树的参数,可以将这个决策树参数输出到csv文件里,然后其他编程语言简单写个决策树就可以利用R训练好的结果,将模型应用到生产环境中去p = xgb.model.dt.tree(colnames(data),model = xgb.fit)

这里写图片描述
好啦, 大概就这些了,具体gbdt算法的原理请参考http://blog.csdn.net/yangxudong/article/details/53872141,挺通俗易懂的。

原创粉丝点击