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

为什么核密度估计调参时交叉验证搜索在大数据集生成nan评分?

问题原因分析
  • 数值异常问题:KernelDensity的默认评分返回的是测试集所有样本的总对数似然,当样本量达到1e6量级时,总对数似然的绝对值会达到1e6以上,同时你设置了rtol=1e-3、atol=1e-3的近似计算参数,大样本下近似误差累计,可能导致部分测试点的密度估计值为0,取对数后得到-inf,最终整个评分被判定为无效值nan。
  • 近似算法误差放大:大样本下核密度估计使用的球树/KD树近似查询的误差会被放大,小带宽参数下更容易出现测试点没有匹配到任何训练核的情况,直接导致密度估计为0,对数似然无效。
  • 1e5样本量下不会触发该问题,是因为样本密度更低、近似误差更小,不会出现密度估计为0的极端情况,总对数似然的数值也在浮点数正常处理范围内。
可行的解决方法
  • 显式指定交叉验证的评分函数,使用平均对数似然替代总对数似然,大幅降低数值范围,同时可以增加对无效值的过滤逻辑,示例代码如下:
def mean_log_likelihood(estimator, X):
    log_scores = estimator.score_samples(X)
    # 过滤-inf的异常值
    valid_scores = log_scores[np.isfinite(log_scores)]
    return np.mean(valid_scores)

# 搜索时传入scoring参数
grid = HalvingRandomSearchCV(KernelDensity(kernel='gaussian', rtol=1e-3, atol=1e-3),
                    {'bandwidth': bandwidths},
                    n_jobs = -1,
                    cv = 3,
                    refit = False,
                    aggressive_elimination = True,
                    verbose = 4,
                    scoring=mean_log_likelihood)
  • 降低近似参数的容忍度,比如把rtol、atol调整为1e-4,提升计算精度,避免出现0值估计
  • 也可以保留当前方案:用1e5量级的抽样数据做带宽搜索,参数确定后再用全量1e6数据拟合KDE,带宽的最优值在1e5样本下已经足够稳定,不会影响最终拟合效果
  • 拟合效果参考图:
    拟合效果图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:36:01