本文通过示例为您介绍,如何基于xgboosttraining_args参数优化XGBoost训练。您可以根据本文示例自行适配您的数据,修改提供的代码示例以进行定制化建模。

前提条件

代码示例

您可以在代码包中的tools/automl目录下查看参数配置文件example.yaml代码。
# Note: ONLY used for oss test!
apiVersion: 0.2.0
kind: Experiment
# stop:
#    name: metric
#    type: larger_is_better
#    value: 0.921
hyperparams:
  - type: Categorical
    # eta: 为了防止过拟合,更新过程中用到的收缩步长。在每次提升计算之后,
    # 算法会直接获得新特征的权重。 eta通过缩减特征的权重使提升计算过程更加保守
    name: eta
    # 枚举的离散化eta参数, range:[0,1], default: 0.3
    candidates: [0.1, 0.2]
 
  - type: Categorical
    # 树的最大深度
    name: max_depth
    # 枚举的离散化max_depth, range:[1,+∞], default: 6
    candidates: [6,7,8]
 
  # Add more hyperparams
  # - type Categorical
  #  树的个数, range:[1,+∞], default:10
  #   name: num_round
  #   candidates: [20, 30, 50, 70, 80,100]
trial:
  name: gp_trial_fn
  tasks:
    - type: BashTask
      cmd: ['bash', 'spark-submit',
            '--master', 'yarn-cluster',
            '--class','ml.dmlc.xgboost4j.scala.example.spark.SparkTraining',
            '/root/xgboosttraining_args-0.1-SNAPSHOT.jar',
            # eta params被使用,通过{{ trial.param.eta }}引用。
            '--eta', "{{ trial.param.eta }}",
            # max_depth config被使用,通过{{ trial.param.max_depth }}引用。
            '--max_depth', "{{ trial.param.max_depth }}",
            '--objective', 'multi:softprob',
            '--num_class','3',
            # num_round if needed to config
            '--num_round','100',
            '--num_workers', '2',
            '--inputPath', 'hdfs://emr-header-1:9000/iris.csv',
            '--outputPath', 'hdfs://emr-header-1:9000/logs/{{trial.id}}/iris.csv.result',
            '--aucPath', 'hdfs://emr-header-1:9000/logs/{{trial.id}}/iris.csv.auc',
            '--accPath', 'hdfs://emr-header-1:9000/logs/{{trial.id}}/iris.csv.acc']
      reader:
        type: hdfs_reader
        path: "hdfs://emr-header-1:9000/logs/{{trial.id}}/iris.csv.acc/part-00000"
algorithm:
  type: gp
  initial_trials_num: 10
runtime:
  max_parallel: 4
  max_trial_num: 300
misc:
  disable_eventlogger: True

运行代码

  1. 通过SSH方式连接集群,详情请参见使用SSH连接主节点
  2. 运行如下命令。
    hadoop fs -put -f iris.csv hdfs://emr-header-1:9000/
    hadoop fs -rm -r hdfs://emr-header-1:9000/logs
    python3 -m pai.automl.core.main --experiment-config example.yaml --user-args log_folder=./tmp --log-level=DEBUGR