You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS XGBoost中interaction_constraints参数配置报错求助

AWS SageMaker XGBoost interaction_constraints参数报错排查

问题重现

代码片段

import boto3
import sagemaker
from sagemaker.xgboost.estimator import XGBoost
from sagemaker.session import Session
from sagemaker.inputs import TrainingInput

hyperparameters = {
        "max_depth":"3",
        "eta":"0.2",
        "gamma":"4",
        "min_child_weight":"6",
        "subsample":"0.7",
        "verbosity":"1",
        "objective":"binary:logistic",
        "interaction_constraints": "[[1, 2], [3, 4, 5]]",
        "tree_method":"hist",
        "num_round":"5"}

bucket = sagemaker.Session().default_bucket()
prefix = 'DEMO-xgboost-as-a-framework'
output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-framework')

xgboost_container = sagemaker.image_uris.retrieve("xgboost", 'ap-northeast-1', "1.7-1")

estimator = sagemaker.estimator.Estimator(image_uri=xgboost_container, 
                                          hyperparameters=hyperparameters,
                                          role=sagemaker.get_execution_role(),
                                          instance_count=1, 
                                          instance_type='ml.m5.2xlarge', 
                                          volume_size=5, # 5 GB 
                                          output_path=output_path)

content_type = "text/csv"
train_input = TrainingInput("s3://XXX/training_processed.csv", content_type=content_type)
validation_input = TrainingInput("s3://XXX/validation_processed.csv", content_type=content_type)

estimator.fit({'train': train_input, 'validation': validation_input})

训练数据CSV样例

0,45.017487,50.0,0,1,0
0,16.325718,47.0,0,1,0
1,12.0497465,15.0,0,1,0
0,15.735234,40.0,0,1,0
1,46.667923,32.0,0,1,0
0,3.5452764,13.0,0,1,0

错误日志

[2023-10-19:10:31:20:ERROR] framework error: 
Traceback (most recent call last):
  File "/miniconda3/lib/python3.8/site-packages/xgboost/core.py", line 1617, in _transform_interaction_constraints
    [feature_idx_mapping[feature_name] for feature_name in constraint]
  File "/miniconda3/lib/python3.8/site-packages/xgboost/core.py", line 1617, in <listcomp>
    [feature_idx_mapping[feature_name] for feature_name in constraint]
KeyError: 1
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/miniconda3/lib/python3.8/site-packages/sagemaker_xgboost_container/algorithm_mode/train.py", line 319, in train_job
    bst = xgb.train(
  File "/miniconda3/lib/python3.8/site-packages/xgboost/core.py", line 620, in inner_f
    return func(**kwargs)
  File "/miniconda3/lib/python3.8/site-packages/xgboost/training.py", line 160, in train
    bst = Booster(params, [dtrain] + [d[0] for d in evals], model_file=xgb_model)
  File "/miniconda3/lib/python3.8/site-packages/xgboost/core.py", line 1579, in __init__
    params_processed = self._configure_constraints(params_processed)
  File "/miniconda3/lib/python3.8/site-packages/xgboost/core.py", line 1637, in _configure_constraints
    ] = self._transform_interaction_constraints(value)
  File "/miniconda3/lib/python3.8/site-packages/xgboost/core.py", line 1621, in _transform_interaction_constraints
    raise ValueError(
ValueError: Constrained features are not a subset of training data feature names
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/miniconda3/lib/python3.8/site-packages/sagemaker_containers/_trainer.py", line 84, in train
    entrypoint()
  File "/miniconda3/lib/python3.8/site-packages/sagemaker_xgboost_container/training.py", line 102, in main
    train(framework.training_env())
  File "/miniconda3/lib/python3.8/site-packages/sagemaker_xgboost_container/training.py", line 98, in train
    run_algorithm_mode()
  File "/miniconda3/lib/python3.8/site-packages/sagemaker_xgboost_container/training.py", line 64, in run_algorithm_mode
    sagemaker_train(
  File "/miniconda3/lib/python3.8/site-packages/sagemaker_xgboost_container/algorithm_mode/train.py", line 250, in sagemaker_train
    train_job(**train_args)
  File "/miniconda3/lib/python3.8/site-packages/sagemaker_xgboost_container/algorithm_mode/train.py", line 415, in train_job
    raise exc.AlgorithmError(f"{exception_prefix}:\n {str(e)}")
sagemaker_algorithm_toolkit.exceptions.AlgorithmError: XGB train call failed with exception:
 Constrained features are not a subset of training data feature names
XGB train call failed with exception:
 Constrained features are not a subset of training data feature names

问题原因

  1. 训练CSV无表头,SageMaker XGBoost算法模式会自动为特征列命名为f0、f1、f2...(第一列是标签,不被当作特征)
  2. interaction_constraints参数中填写的1、2等数字会被XGBoost识别为特征名称而非特征索引,系统找不到名为1的特征,因此触发KeyError和约束特征不匹配错误。

解决方案

方案1:使用自动生成的特征名修改约束参数

训练数据中标签列后有5个特征列,对应自动命名的f0到f4。修改interaction_constraints为对应特征名的字符串格式:

hyperparameters = {
    # 其他参数保持不变
    "interaction_constraints": "[[\"f0\", \"f1\"], [\"f2\", \"f3\", \"f4\"]]"
}

方案2:给CSV添加自定义表头

在训练和验证CSV文件的第一行添加表头,例如:

label,feat1,feat2,feat3,feat4,feat5

然后修改interaction_constraints参数使用自定义特征名:

hyperparameters = {
    # 其他参数保持不变
    "interaction_constraints": "[[\"feat1\", \"feat2\"], [\"feat3\", \"feat4\", \"feat5\"]]"
}

内容的提问来源于stack exchange,提问作者北川淳一郎

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:17:20