美文网首页
XGBoost简单入门以及调参

XGBoost简单入门以及调参

作者: 取名字真的很烦啊 | 来源:发表于2018-10-11 17:06 被阅读0次

      据说XGBoost一直都是Kaggle大神们取得好成绩的得力助手,这边也跟风学了下,下面就用 sklearn 自带的手写识别数据来介绍一下 xgb 的上手入门。

      首先是导入需要的包

    from sklearn.datasets import load_digits              # 导入 sklearn 手写识别数据
    from sklearn.metrics import accuracy_score         # 用来计算 XGB 的预测准确率
    import xgboost as xgb
    

      接下来导入数据:

    digits = load_digits()
    trX,teX,trY,teY = train_test_split(digits.data,digits.target,test_size=0.3,random_state=0)
    

      接下来就可以跑模型了。
      要注意的是,这里手写识别是多分类问题,因此objective需要设置。由于是上手,所以其他参数就随便填了下。需要注意的是,这里为了评判模型的结果,所以用到了 sklearn.metrics 的 accuracy_score 方法。

    params={'objective':'multi:softmax',            # 定义多分类问题
           'num_class':10,                          # 类别个数
           'eta':0.1,                              # 学习率
           'silent':1                              # 是否打印中间结果,1就是不打印
           }
    train = xgb.DMatrix(trX,label=trY)
    test = xgb.DMatrix(teX,label=teY)
    num_round = 5
    bst = xgb.train(params,train,num_round)
    pred = bst.predict(test)
    accuracy = accuracy_score(teY,pred)
    print('The accuracy of is %.4f'%accuracy)
    

      这样简单的跑下来结果如下:


    output.png

      下面是调参环节。这里用到了 sklearn 的 GridSearchCV 类来组合调节参数,以及 xgb 的 python 接口类 XGBClassifier

       GridSearchCV 有一个参数 param_grid,接受 python 字典类型作为 input 。在调参的过程,把需要调整的参数的名字以及多个值作为键值对存入字典当中,sklearn 就会自动训练帮我们选出最好的参数了。

      param_grid 还可以任意组合参数,所以完全可以这样写,

    cv_params={'eta':[0.1,0.01],'max_depth':[7,8,9,10]}
    

      像这种写法,它会给我们自动组合 eta 和 max_depth 的值,然后得到结果最好的值对。

      我这里就没有这么做了。

    from sklearn.model_selection import GridSearchCV
    cv_params={'eta':[0.1,0.01]}
    gbm = xgb.XGBClassifier(**params)
    opt_clf = GridSearchCV(estimator=gbm,param_grid=cv_params,cv=5)
    opt_clf.fit(trX,trY)
    print('参数最佳取值:{0}'.format(opt_clf.best_params_))
    print('最佳模型得分:{0}'.format(opt_clf.best_score_))
    

    跑下来结果如下:


    output.png

    相关文章

      网友评论

          本文标题:XGBoost简单入门以及调参

          本文链接:https://www.haomeiwen.com/subject/rpnbaftx.html