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

kNN分类器创建meshgrid时触发MemoryError内存错误问题排查

kNN决策边界绘制Meshgrid内存错误解决方案

报错根因:即使仅使用2个特征绘制决策边界,若网格采样步长设置过小,两个维度的采样点数乘积会产生指数级增长的网格点,你遇到的报错对应总元素量已超过8.6e11个,远超常规内存负载上限。

  • 调整网格采样方式,降低采样密度
    放弃用np.arange()设置固定小微步长的采样逻辑,改用np.linspace()固定每个维度的采样点数,常规场景下每个维度采样100~300个点完全可以满足决策边界的可视化清晰度要求,示例代码如下:
    # 取两个特征的取值上下限
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    # 每个维度仅采样200个点,总网格点仅200*200=40000个
    x = np.linspace(x_min, x_max, 200)
    y = np.linspace(y_min, y_max, 200)
    xx, yy = np.meshgrid(x, y)
    
  • 降低数组存储精度
    无需使用默认的float64精度存储网格点,转成float32可直接减半内存占用,kNN模型对低精度输入无兼容性问题,不会影响分类结果:
    xx = xx.astype(np.float32)
    yy = yy.astype(np.float32)
    
  • 分块生成预测网格
    若确实需要极高精度的决策边界,不要一次性生成全量网格,将y轴拆分为多个小块,逐块生成网格、送入模型预测、存储预测结果,最后拼接所有结果画图,全程仅需加载单块网格的内存。
  • 先做特征归一化
    提前对两个输入特征做标准化/归一化,把特征取值范围压缩到[0,1]或[-1,1]区间,避免因特征取值范围过大导致的不必要的过量采样点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:06:03