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

使用EvalML的AutoMLSearch时出现全管道np.nan得分报错求解决

EvalML AutoMLSearch 全管道LogLossBinary得分NaN问题排查方案
  • 检查数据集标签分布
    二分类任务里,要是标签严重失衡(比如某一类占比99%以上),或者所有样本标签完全一致,LogLoss计算直接会返回NaN。用df['target'].value_counts()查看标签分布,失衡严重的话,要么补少数类样本,要么换用对失衡更鲁棒的指标(比如F1、AUC),或者初始化AutoMLSearch时设objective='F1'。

  • 验证数据集特征质量

    • 查缺失值:用df.isnull().sum()统计各特征缺失情况,缺失占比过高的直接删,或者用SimpleImputer提前填充(注意测试集填充逻辑要和训练集一致)。
    • 排查异常值:数值特征里有极端值(比如无穷大、远超合理范围的数)会导致模型训练失败,进而得分NaN。用df.describe()看数值特征分位数,对异常值做截断或删除。
    • 确认特征类型:别把文本特征误标成数值型,也别让分类特征的类别数量太多(比如超过1000个唯一值),不然管道预处理会出错。用df.dtypes检查特征类型,分类特征要做编码(低基数用OneHotEncoder,高基数用TargetEncoder)。
  • 调整AutoMLSearch参数

    • 关闭自动特征工程:自动生成的衍生特征可能引入无效值,初始化时设feature_engineer=False,先验证基础管道能不能正常跑。
    • 限制管道类型:只留简单模型管道(比如逻辑回归),设allowed_model_families=['linear_model'],排查是不是复杂模型导致的计算问题。
    • 调整交叉验证策略:默认CV折数或分层逻辑有问题的话,手动指定cv=3(减少折数)或者stratify=True(分类任务强制分层抽样)。
  • 手动调试单个管道
    从EvalML可用管道里挑个最简单的(比如LogisticRegressionBinaryPipeline),手动训练计算LogLoss,定位具体出错环节:

    from evalml.pipelines import LogisticRegressionBinaryPipeline
    from evalml.objectives import LogLossBinary
    
    pipeline = LogisticRegressionBinaryPipeline({})
    pipeline.fit(X_train, y_train)
    predictions = pipeline.predict_proba(X_val)
    score = LogLossBinary().score(predictions, y_val)
    print(score)
    

    要是这里的score也是NaN,说明问题出在模型预测或指标计算上,进一步查predictions有没有0或1的概率值(LogLoss对0/1概率取对数会出无穷大,进而变成NaN),可以给预测概率加个极小值(比如predictions = np.clip(predictions, 1e-10, 1-1e-10))再算得分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:55:19