分享
有人使用过xgboost吗?
最近在用xgboost进行数据分类,xgboost是最近很牛逼的一个boost实现,在很多数据挖掘比赛(比如kaggle)上都大放异彩我使用的是xgboost的java版本,用了它自带的例子没有任何问题,分类很正确,但是用自己生成的数据测试就不对劲了,我生成了一组用肉眼就可以区分的数据1,1,1,1,1,1,1,21,1,1,1,1,1,1,2…1,1,1,1,1,1,1,22,2,2,2,2,2,2,42,2,2,2,2,2,2,4…2,2,2,2,2,2,2,4并转换成了SVM格式的数据文件,结果用xgboost训练时只有50%的准确率,这是为毛啊?xgboost的参数我都是按照默认来的没动过(“eta”, 0.1);(“max_depth”, 10);(“silent”, 1);
回复 ( 9 )
我没有用过java版本,不过下面是几点可能有用的建议
我也跑过java版本的几个例子,java版本有个问题就是你没办法debug进具体的已经封装好的函数,而且我记得C++版本有专门的libSVM格式的parser需要后缀为.txt来着,严重怀疑你数据没读对。
个人的xgboost的配置经验:xgboost安装在visual studio的c++环境下或者eclipse的java环境下
周围有人用,自己没用过。
Xgboost还是不错的,最近用kaggle的titanic做了测试,准确率到了80.3%
1年前的时候我用过,还写过一篇博客作为笔记:xgboost快速入门 – linger(心怀梦想,活在当下) – 博客频道 – CSDN.NET
你可以参考下,里面还有例子。
建议你先确认一下文件输入格式没错,看你的数据label和feature没区分开吧。
还有,训练的参数是否正确,迭代次数够了吗?
输入数据仍然支持libsvm的格式,这也是比较喜欢的一个格式。
每一行都是
label index1:value1 index2:value2……
的格式。
不过xgboost对label的有个要求,就是要从0开始。
比如2分类,label只能是0,1。
3分类,label只能是0,1,2。
@TomHall 我最近在学习 XGBoost,遇到一个问题。
XGboost 在训练模型的时候要求数据是 matrix 的,我的数据有个字段A是 character 的,内容类似 YYYY, YYYN, YYNN, YNNN, NNNN 这样。
使用 XGBoost 样例给的代码
train_data <- Matrix::sparse.model.matrix(last_sg~.-1, data = train_set)
来转换 Matrix 后,模型能跑出来,但我打印出 dump tree后,看到tree中有
“ID” “Feature” “Split” “Yes” “No” “Missing” “Quality” “Cover” “Tree” “Yes.Feature” “Yes.Cover” “Yes.Quality” “No.Feature” “No.Cover” “No.Quality”
“28” “0-23” “57” “-1.00136e-005” “0-47” “0-48” “0-47” 21.1144 1549 0 “79” 1489.25 17.6732 “56” 59.75 11.7322
这样的数据, “57” 是 feature index ID, 正好是A+YYNN,我不知道如何去解释这个条件了。
可否解释为:
A字段是 YYNN 进入 0-47 分支, 不是 YYNN,进入0-48分支。(但如果这样解释,就不知道MISS有什么作用了)
请帮忙解答。万分感谢。
请问xgboost最开始发表在哪里的?参考文献中要引用这个东西,找不到论文。
没用过java版本,在python下可以导出决策树的图像来观察一波,或者输出各个特征的重要性,或者输出文本描述的树结构。你可以看看java版有没有类似的功能。
建议先看看源码,把xgboost下面的demo跑一下