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

使用Sklearn做ML时出现RuntimeWarning:除法无效值错误求助

RuntimeWarning 错误原因及解决办法

错误原因

这些RuntimeWarning是StandardScaler计算均值、方差时触发的,核心问题是数据中存在无效值(NaN/inf),或者某列特征所有值完全相同(方差为0),导致除法运算出现无效结果。

解决步骤

  • 第一步:排查并清理无效值
    先检查数据里是否有NaN或无穷大值:

    import numpy as np
    # 先保留DataFrame格式检查,不要直接转成values
    temp_df = df_final.drop(['fraud_reported_Y', 'policy_csl', 'policy_bind_date', 'incident_date'], axis=1)
    print("NaN总数量:", temp_df.isna().sum().sum())
    print("Inf总数量:", np.isinf(temp_df).sum().sum())
    

    如果存在无效值,用均值/中位数填充,或者删除对应行:

    # 用均值填充数值型列的NaN
    df_final = df_final.fillna(df_final.mean(numeric_only=True))
    # 或者直接删除含NaN的行
    df_final = df_final.dropna(axis=0)
    
  • 第二步:删除方差为0的特征列
    找出所有值完全相同的列(方差为0),这类特征对模型无贡献,还会导致标准化报错:

    temp_df = df_final.drop(['fraud_reported_Y', 'policy_csl', 'policy_bind_date', 'incident_date'], axis=1)
    zero_var_cols = temp_df.columns[temp_df.var() == 0].tolist()
    print("方差为0的特征列:", zero_var_cols)
    # 删除这些无意义的列
    df_final = df_final.drop(zero_var_cols, axis=1)
    
  • 第三步:调整数据处理流程
    先完成数据清理,再拆分训练集和测试集,避免测试集出现同样问题;同时测试集标准化时不要重新拟合,复用训练集的均值和方差:

    # 先执行上面的清理步骤
    # ...
    
    # 拆分数据集
    X = df_final.drop(['fraud_reported_Y', 'policy_csl', 'policy_bind_date', 'incident_date'], axis=1).values
    y = df_final['fraud_reported_Y'].values
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
    
    # 标准化操作
    sc = StandardScaler()
    X_train = sc.fit_transform(X_train)
    X_test = sc.transform(X_test)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:40:24