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

使用CatBoostClassifier指定cat_features时出现‘Sex不在列表中’报错求助

CatBoostClassifier报错:'Sex' is not in list 问题排查

问题背景

使用CatBoostClassifier处理数据并通过ROC_AUC评估模型时出现报错,此前Logistic Regression在相同数据上可正常运行。

代码示例

from catboost import CatBoostClassifier
from sklearn.metrics import roc_auc_score

model = CatBoostClassifier(iterations = 100, learning_rate = 0.1, depth = 6, random_state=42)
model.fit(X_train,y_train, cat_features=cat_cols)
y_pred = model.predict(X_test)
roc_auc = roc_auc_score(y_test, model.predict_proba(X_test)[:,1])
roc_auc 

报错信息

ValueError: 'Sex' is not in list

已确认信息

cat_cols列表明确包含'Sex'特征,输出如下:

['Sex', 'IsSeniorCitizen', 'HasPartner', 'HasChild', 'HasPhoneService', 'HasMultiplePhoneNumbers', 'HasInternetService', 'HasOnlineSecurityService', 'HasOnlineBackup', 'HasDeviceProtection', 'HasTechSupportAccess', 'HasOnlineTV', 'HasMovieSubscription', 'HasContractPhone', 'IsBillingPaperless', 'PaymentMethod']

报错原因及解决方法

1. X_train列名与cat_cols不匹配

CatBoost通过列名匹配分类特征时,对大小写、拼写、特殊字符严格敏感。比如X_train中列名可能是小写的sex,或者带空格的 Sex,导致无法匹配cat_cols中的Sex。

  • 解决:执行print(X_train.columns)(若X_train是DataFrame),逐行对比与cat_cols的一致性,修正列名或cat_cols中的对应值。

2. X_train为numpy数组而非DataFrame

若X_train是numpy数组,CatBoost无法识别列名,此时传入列名列表cat_cols会触发报错,因为数组只有索引没有列名。

  • 解决:将numpy数组转换为DataFrame(指定列名),或改用特征的索引位置列表作为cat_features参数(比如cat_cols对应的列索引:[0,1,2,...])。

3. 预处理流程中丢失或修改了'Sex'列

在数据划分train/test前的预处理步骤(如特征选择、清洗、重命名)中,可能不小心删除了'Sex'列,或修改了列名但未同步更新cat_cols。

  • 解决:回溯数据预处理的每一步,确认'Sex'列始终存在且列名未被修改;若确有修改,同步更新cat_cols中的对应值。

内容的提问来源于stack exchange,提问作者Baizhan Kh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:08:48