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

scikit-learn高斯过程回归预测触发float64数值异常报错

解决scikit-learn高斯过程回归predict时的NaN/inf数值错误

可能的报错原因

  • 核函数计算的数值溢出:即使训练数据和候选点无NaN,当候选点与训练点距离过大时,部分核函数(如RBF)的指数运算可能出现极端值,累积后导致浮点溢出;或核矩阵求逆的微小误差在大维度运算中被放大,产生inf/NaN。
  • 大批次预测的数值累积误差:一次性对25000个候选点预测会生成25000×100的K_star矩阵,浮点运算的累积误差可能超出float64的数值范围。
  • 核矩阵条件数的隐性问题:虽然核条件数稳定在1e7,但结合大维度的候选点矩阵运算时,仍可能触发矩阵求逆或乘法的数值不稳定。

具体规避方法

1. 分批次预测候选点

将25000个候选点拆分为小批次计算,降低单批次矩阵运算规模,减少数值累积误差:

batch_size = 1000
mu_list = []
sig_list = []
for i in range(0, len(candidate_pts), batch_size):
    batch = candidate_pts[i:i+batch_size]
    mu_batch, sig_batch = gprMdl.predict(batch, return_std=True)
    mu_list.append(mu_batch)
    sig_list.append(sig_batch)
mu = np.concatenate(mu_list)
sig = np.concatenate(sig_list)

2. 过滤极端距离的候选点

若候选点超出训练数据的覆盖范围,核函数计算易出现极端值。可计算候选点到训练集的最小距离,过滤掉过远的点:

from scipy.spatial.distance import cdist
# 计算每个候选点到训练集的最小欧氏距离
min_distances = cdist(candidate_pts, X_train).min(axis=1)
# 过滤掉距离超过训练集范围3倍的点(阈值可根据实际调整)
valid_mask = min_distances < 3 * X_train.ptp(axis=0).max()
candidate_pts_valid = candidate_pts[valid_mask]

3. 提升核矩阵的数值稳定性

在GPR初始化时增大alpha参数,给核矩阵添加微小对角扰动,优化矩阵求逆的稳定性:

from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF

kernel = RBF(length_scale=1.0)
# 调整alpha从默认1e-10到1e-8,增强稳定性
gprMdl = GaussianProcessRegressor(kernel=kernel, alpha=1e-8, random_state=42)

4. 标准化输入数据

对训练数据和候选点做标准化处理,缩小输入数值范围,降低核函数距离计算的溢出风险:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
candidate_pts_scaled = scaler.transform(candidate_pts)
# 使用标准化后的数据训练GPR并执行预测

5. 排查核函数计算的中间结果

手动计算核矩阵K_star,检查是否存在异常值:

K_star = gprMdl.kernel_(candidate_pts, X_train)
print("是否存在NaN/inf:", np.isnan(K_star).any(), np.isinf(K_star).any())
print("核矩阵极值:", K_star.min(), K_star.max())

若发现异常值,可针对性调整核参数(如增大RBF核的length_scale)或过滤对应候选点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:03:23