sklearn.neighbors.KernelDensity中atol、rtol默认值为0的含义及疑问
sklearn.neighbors.KernelDensity 中 atol 和 rtol 参数解析
默认值为0的含义
当atol(绝对容差)和rtol(相对容差)都设为0时,KernelDensity会执行精确的核密度计算——也就是会遍历所有训练数据点来计算每个样本的似然值,不会跳过任何数据点,完全没有近似逻辑。
是否使用所有数据点?
是的,此时算法会调用全部训练数据参与计算,没有任何优化性的点过滤。需要注意:如果使用的是algorithm='brute',不管容差参数如何设置都会遍历所有点;如果是树结构算法(ball_tree/kd_tree),当两个容差都为0时,也会退化为精确计算,结果和暴力法完全一致。
非0值的作用
当atol或rtol不为0时,仅在使用algorithm='ball_tree'、algorithm='kd_tree'或algorithm='auto'(自动选择树结构)时生效,此时算法会开启近似核密度估计:
- 算法会基于树结构快速筛选数据点,当某个点对目标样本的核密度贡献小于
atol + rtol * 当前累计的似然值时,就会跳过该点,不再计算其贡献 - 这种近似能大幅提升大数据集下的计算速度,但会引入一定误差:容差设置越大,跳过的点越多,计算越快,但结果的精度损失也可能越大;反之,容差越接近0,结果越接近精确计算,但速度优势越不明显
内容的提问来源于stack exchange,提问作者lglgunlock
相关产品推荐
相关产品推荐

