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

如何在Scikit-learn中使用分层交叉验证处理多分类任务

用Scikit-learn实现多分类任务的分层交叉验证

分层交叉验证(Stratified Cross Validation)在多分类任务里堪称实用工具——它能保证每个交叉验证折(fold)的类别分布和整个数据集完全匹配,避免随机划分带来的类别失衡问题,让模型的评估结果更精准可信。下面我就一步步带你实现,附上完整可运行的代码示例:

完整代码示例

from sklearn.model_selection import RandomizedSearchCV, GridSearchCV
from sklearn.metrics import roc_auc_score
from sklearn.metrics import precision_recall_fscore_support as score
from sklearn.model_selection import StratifiedKFold
from xgboost import XGBClassifier
import time

# 1. 定义模型超参数搜索空间
params = {
    'min_child_weight': [1, 5, 10],
    'gamma': [0.5, 1, 1.5, 2, 5],
    'subsample': [0.6, 0.8, 1.0],
    'colsample_bytree': [0.6, 0.8, 1.0],
    'max_depth': [3, 4, 5]
}

# 2. 初始化XGBoost多分类模型
# 注意:多分类任务要设置objective为'multi:softprob',并指定类别数num_class
xgb = XGBClassifier(
    learning_rate=0.02,
    n_estimators=600,
    objective='multi:softprob',
    num_class=3,  # 这里替换成你的任务实际类别数
    seed=42,
    use_label_encoder=False,
    eval_metric='mlogloss'
)

# 3. 设置分层交叉验证策略
# n_splits是折数,shuffle=True保证每次划分随机,random_state固定结果可复现
stratified_kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)

# 4. 用网格搜索(或随机搜索)结合分层交叉验证调参
# 这里以GridSearchCV为例,也可以换成RandomizedSearchCV提升调参效率
grid_search = GridSearchCV(
    estimator=xgb,
    param_grid=params,
    cv=stratified_kfold,
    scoring='roc_auc_ovr',  # 多分类的ROC-AUC用ovr(一对多)或ovo(一对一)
    n_jobs=-1,  # 用所有CPU核心加速计算
    verbose=2
)

# 5. 拟合数据(假设你已经准备好X特征矩阵和y标签)
# grid_search.fit(X, y)

# 6. 查看最佳参数和评估结果
# print("最佳超参数:", grid_search.best_params_)
# best_model = grid_search.best_estimator_

# 7. 模型评估示例
# y_pred = best_model.predict(X_test)
# y_proba = best_model.predict_proba(X_test)
# precision, recall, fscore, support = score(y_test, y_pred)
# roc_auc = roc_auc_score(y_test, y_proba, multi_class='ovr')

# print(f"多分类ROC-AUC: {roc_auc:.4f}")
# print("各类别精确率:", precision)
# print("各类别召回率:", recall)
# print("各类别F1分数:", fscore)

关键要点说明

  • 分层交叉验证的核心:StratifiedKFold会根据标签y的分布来划分数据集,每个fold的类别占比和原始数据一致,这对样本不平衡的多分类任务尤其重要。
  • XGBoost多分类设置:必须指定objective='multi:softprob'(输出每个类别的概率),同时用num_class指定任务的类别数量;关闭use_label_encoder并设置eval_metric='mlogloss'可以避免版本兼容警告。
  • 多分类评估指标:ROC-AUC在多分类场景下要指定multi_class参数(ovr或ovo),而precision_recall_fscore_support会直接返回每个类别的精确率、召回率和F1分数,方便你细致分析模型表现。

这样一套流程下来,你就能在多分类任务中充分利用分层交叉验证的优势,得到更可靠的模型评估和调参结果啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:36:37