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

执行代码遇ValueError:pos_label=1无效,如何排查解决?

极端不平衡数据集下LearningCurveDisplay报错的成因与解决

错误成因

报错ValueError: pos_label=1 is not a valid label: It should be one of [0]的核心原因是:交叉验证的部分折数中,验证集完全没有少数类(标签1)的样本。

webpage属于极端不平衡数据集,正负样本比例悬殊。哪怕使用分层交叉验证,当少数类样本总数过少时,分层抽样仍可能导致某几折的验证集里只有标签0的样本。而average_precision评分指标默认以标签1为正类,当验证集不存在该标签时,就会触发这个错误。

解决办法

1. 优化分层交叉验证策略

使用StratifiedKFold并开启打乱(shuffle=True),同时调整折数(比如减少到3折),确保每折都能分到少数类样本:

from sklearn.model_selection import StratifiedKFold

# 定义分层交叉验证规则,打乱数据保证样本分布均匀
cv = StratifiedKFold(n_splits=3, shuffle=True, random_state=0)

LearningCurveDisplay.from_estimator(
    model,
    X, y,
    train_sizes=train_sizes,
    cv=cv,
    scoring='average_precision',
    line_kw={"marker": "o"},
)

2. 调整评分指标

方案A:自定义评分器处理单类别情况

手动编写评分函数,当验证集只有单一类别时返回合理默认值:

from sklearn.metrics import make_scorer, average_precision_score
import numpy as np

def custom_ap(y_true, y_score):
    if len(np.unique(y_true)) == 1:
        return 0.0
    return average_precision_score(y_true, y_score, pos_label=1)

# 生成自定义评分器
custom_scorer = make_scorer(custom_ap, needs_proba=True)

LearningCurveDisplay.from_estimator(
    model,
    X, y,
    train_sizes=train_sizes,
    cv=10,
    scoring=custom_scorer,
    line_kw={"marker": "o"},
)

方案B:换用鲁棒性更强的指标

比如roc_auc,它在单类别验证集下不会报错,对不平衡数据集也更友好:

LearningCurveDisplay.from_estimator(
    model,
    X, y,
    train_sizes=train_sizes,
    cv=10,
    scoring='roc_auc',
    line_kw={"marker": "o"},
)

3. 平衡数据集分布

使用过采样/欠采样方法调整类别比例,避免交叉验证时出现单类别折:

from imblearn.over_sampling import SMOTE

# 对少数类进行过采样
smote = SMOTE(random_state=0)
X_balanced, y_balanced = smote.fit_resample(X, y)

LearningCurveDisplay.from_estimator(
    model,
    X_balanced, y_balanced,
    train_sizes=train_sizes,
    cv=10,
    scoring='average_precision',
    line_kw={"marker": "o"},
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 02:13:11