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

使用KMeans聚类计算WCSS时如何避免Windows MKL环境内存泄漏?

解决方案汇总

C:\Users\grahv\anaconda3\lib\site-packages\sklearn\cluster_kmeans.py:881: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.

该警告是Windows平台下MKL数学库与scikit-learn KMeans多线程调度冲突导致的,可按优先级选择以下方案解决:

方案1:代码内临时设置环境变量(最推荐,无全局影响)

在你的Python脚本最开头、导入scikit-learn之前添加如下代码即可:

import os
os.environ["OMP_NUM_THREADS"] = "1"
# 后面再导入sklearn相关包以及写业务代码

修改后的完整肘法计算代码示例:

import os
os.environ["OMP_NUM_THREADS"] = "1"

from sklearn.cluster import KMeans

wcss = []
for i in range(1,10):
    kmeans = KMeans(n_clusters=i, n_init=10) # 手动指定n_init可同时规避新版sklearn的默认参数警告
    kmeans.fit(x_scaled)
    wcss.append(kmeans.inertia_)

这个方案只会对当前运行的脚本生效,不会修改系统全局配置,也不会影响其他程序运行。

方案2:临时设置系统环境变量

如果不想修改代码,可在运行脚本前,在当前命令行窗口执行命令:
set OMP_NUM_THREADS=1
执行后再在同一个窗口启动Python运行你的脚本即可,关闭命令行后该配置自动失效。

方案3:永久设置系统环境变量

如果你需要长期规避该问题,可在Windows系统环境变量中新增一条配置:

  • 变量名:OMP_NUM_THREADS
  • 变量值:1

配置完成后重启命令行/IDE即可生效,注意该配置会全局生效,影响所有调用MKL库的程序。

补充说明

如果担心单线程影响运行效率,可根据你的CPU核心数将OMP_NUM_THREADS设置为小于等于4的数值,只要线程数不超过数据集分块数,就可以同时规避内存泄漏风险和保证运行效率,小数据集下单线程和多线程的运行速度几乎无差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:39:01