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

如何在Python中迭代创建逐步减特征的XGBClassifier模型并评估

解决方案

以下是满足需求的完整实现代码,附带关键步骤说明:

1. 导入必要库

import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score

2. 数据准备(假设你的DataFrame名为df)

# 分离特征与目标变量
X = df[['X1', 'X2', 'X3', 'X4', 'X5']]
y = df['Y']

# 拆分训练集与测试集(设置random_state保证结果可复现)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)

3. 模型迭代训练与结果收集

# 初始化存储模型的列表和结果数据的列表
list_of_models = []
results = []

# 获取所有特征名称
all_features = X.columns.tolist()

# 循环迭代:从全量特征到仅保留最后1个特征
for i in range(len(all_features)):
    # 当前使用的特征子集:每次移除前i个特征(可根据需求调整移除逻辑)
    current_features = all_features[i:]
    feature_count = len(current_features)
    
    # 提取当前特征的训练/测试数据
    X_train_sub = X_train[current_features]
    X_test_sub = X_test[current_features]
    
    # 初始化并训练XGBoost分类器
    model = xgb.XGBClassifier(objective='binary:logistic', random_state=42)
    model.fit(X_train_sub, y_train)
    
    # 预测概率(ROC AUC需要概率值,而非类别标签)
    y_train_pred_proba = model.predict_proba(X_train_sub)[:, 1]
    y_test_pred_proba = model.predict_proba(X_test_sub)[:, 1]
    
    # 计算AUC分数
    train_auc = roc_auc_score(y_train, y_train_pred_proba)
    test_auc = roc_auc_score(y_test, y_test_pred_proba)
    
    # 存储模型与结果
    list_of_models.append(model)
    results.append({
        '模型序号': i+1,
        '特征数': feature_count,
        '训练集AUC': round(train_auc, 4),
        '测试集AUC': round(test_auc, 4)
    })

# 将结果转换为DataFrame
results_df = pd.DataFrame(results)

4. 关键说明

  • 特征移除逻辑:示例中每次移除前i个特征,若需要随机移除或按重要性移除,可修改current_features的生成逻辑(比如按XGBoost的特征重要性排序后移除)。
  • 概率预测:ROC AUC评估依赖预测的正类概率,因此必须使用predict_proba而非predict。
  • 可复现性:设置random_state确保每次运行的拆分结果和模型训练结果一致。
  • 结果格式:results_df会按模型迭代顺序展示性能,list_of_models按顺序存储每个训练好的模型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:45:29