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

如何基于不参与训练的ID实现StratifiedGroupKFold交叉验证?

解决StratifiedGroupKFold分组ID被当作特征训练的问题

完全可以放心移除X_train_df中的ID列,分组拆分不会失效——StratifiedGroupKFold的分组逻辑只依赖于fit方法传入的groups参数,和X中的特征无关。

具体修改步骤如下:

  • 先从训练特征中剔除ID列,得到纯特征矩阵:
    # 移除ID列,保留用于模型训练的特征
    X_train_features = X_train_df.drop('ID', axis=1)
    
  • 保持分组ID列表id_ls不变,它仅用于交叉验证的分组拆分,不参与模型训练
  • 修改GridSearchCV的fit调用,传入剔除ID后的特征矩阵:
    grid={'C':np.logspace(-3,3,7)}
    grkf_cv = StratifiedGroupKFold(n_splits=10)
    id_ls = X_train_df['ID'].to_list()  
    
    log_reg = LogisticRegression(max_iter=100, random_state=42)
    logreg_cv = GridSearchCV(log_reg, grid, cv=grkf_cv, scoring='roc_auc')
    # 这里传入X_train_features而非原X_train_df
    logreg_cv.fit(X_train_features, y_train_df, groups=id_ls)
    

原理说明

StratifiedGroupKFold做交叉验证拆分时,只会根据groups参数里每个样本对应的分组ID来划分训练集和验证集,确保同一组的样本不会同时出现在训练和验证集中。这个过程和X中的特征完全独立,所以只要groups参数正确传递,即使X里没有ID列,拆分逻辑也能正常工作。而模型训练时用的是剔除ID后的特征矩阵,就不会把ID当作特征参与训练了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:01:01