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

Python运行XGBoost报xgboost.core.XGBoostError 0特征输入错误求助

错误根本原因

你的数据集仅包含Posts Frequency、Likes Count两列,构造训练特征时把两列都排除了,导致输入XGBoost的训练特征集为空,触发了0 feature is supplied的报错。

具体问题点

  • 构造X_train时使用了~train_data.columns.isin(['Posts Frequency','Likes Count'])的过滤规则,直接把仅有的两列都过滤掉,训练特征维度为0
  • 重复执行了两次GroupShuffleSplit拆分逻辑,属于冗余代码
  • 构造y_test时列名多输入了前置空格,写为[' Likes Count'],会导致测试集标签为空
  • 预测函数中过滤规则写为~data.columns.isin( ['Posts Frequency'] ),如果后续特征构造正确的话,也会导致预测时传入空特征

修复方案

  1. 修正训练/测试集的特征构造逻辑,仅过滤标签列Likes Count,保留特征列Posts Frequency
  2. 删除重复的拆分代码,修正y_test的列名空格问题
  3. 同步修正预测函数的特征过滤规则

修正后的核心代码片段

# 仅保留一次拆分逻辑即可
gss = GroupShuffleSplit(test_size=.20, n_splits=1, random_state = 7).split(data, groups=data['Posts Frequency'])
X_train_inds, X_test_inds = next(gss)

train_data= data.iloc[X_train_inds]
# 仅排除标签列,保留特征列
X_train = train_data.loc[:, ~train_data.columns.isin(['Likes Count'])]
y_train = train_data.loc[:, train_data.columns.isin(['Likes Count'])]
groups = train_data.groupby('Posts Frequency').size().to_frame('size')['size'].to_numpy()

test_data= data.iloc[X_test_inds]
X_test = test_data.loc[:, ~test_data.columns.isin(['Likes Count'])]
# 修正列名的空格问题
y_test = test_data.loc[:, test_data.columns.isin(['Likes Count'])]

# 训练代码不变
model = xgb.XGBRanker(
    tree_method='gpu_hist',
    booster='gbtree',
    objective='rank:pairwise',
    random_state=42,
    learning_rate=0.1,
    colsample_bytree=0.9,
    eta=0.05,
    max_depth=6,
    n_estimators=110,
    subsample=0.75
    )
model.fit(X_train, y_train, group=groups, verbose=True)

# 修正预测函数的特征过滤规则
def predict(model, data):
    return model.predict( data.loc[:, ~data.columns.isin( ['Likes Count'] )] )

predictions = (data.groupby( 'Posts Frequency' )
               .apply( lambda x: predict( model, x ) ))

内容的提问来源于stack exchange,提问作者Sofia Vlachou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:15:03