有人使用过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);

2017年6月5日 9 条回复 1654 次浏览

发起人:江志良 初入职场

忘掉初心的人会死的很惨

回复 ( 9 )

  1. TomHall
    理由
    举报 取消

    我没有用过java版本,不过下面是几点可能有用的建议

    • 可以先试试运行java接口的demo来检查配置是否成功:xgboost/java/xgboost4j-demo/src/main/java/org/dmlc/xgboost4j/demo at master · dmlc/xgboost · GitHub
    • 默认参数并不适合所有数据,要得到好的效果应该调参。
    • 设置 put(“objective”, “binary:logistic”); 来训练分类模型
    • 对参数的基本介绍可见:XGBoost Parameters
    • 一些调参的基本介绍可以参考:Notes on Parameter Tuning
  2. 做二分类的任务时,类别标签应该是{0,1}
  3. 比起知乎,在xgboost项目的issue页面提问能得到更快的回答:Issues · dmlc/xgboost · GitHub
  • 沟槽
    理由
    举报 取消

    我也跑过java版本的几个例子,java版本有个问题就是你没办法debug进具体的已经封装好的函数,而且我记得C++版本有专门的libSVM格式的parser需要后缀为.txt来着,严重怀疑你数据没读对。

    个人的xgboost的配置经验:xgboost安装在visual studio的c++环境下或者eclipse的java环境下

  • 李飞腾
    理由
    举报 取消

    周围有人用,自己没用过。

  • 侯亮
    理由
    举报 取消

    Xgboost还是不错的,最近用kaggle的titanic做了测试,准确率到了80.3%

  • linger liu
    理由
    举报 取消

    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。

  • mason
    理由
    举报 取消

    @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跑一下

  • 我来回答

    Captcha 点击图片更换验证码