sklearn.cluster.KMeans在Windows环境下随机触发堆内存损坏错误0xC0000374求助
sklearn.cluster.KMeans在Windows环境下随机触发堆内存损坏错误0xC0000374求助
我最近碰到一个特别头疼的随机问题:在Windows环境下用scikit-learn的KMeans做聚类时,会随机出现堆内存损坏错误0xC0000374,大概一半概率触发,完全没规律——有时候能正常跑,有时候直接崩。
先说说我的环境配置:
- 系统:Windows 11 Home 24.2
- Python版本:3.12.8
- 开发环境:PyCharm Community Edition 2024.3(但在其他IDE甚至CMD里也能复现这个问题)
- 虚拟环境:全新创建的venv,pip版本24.3.1
- 依赖库版本:
- Numpy 2.2.1
- Scikit-learn 1.6.1
- Scipy 1.15.1
- threadpoolctl 3.5.0
- joblib 1.4.2
我的测试代码非常极简,就是官方示例级别的代码:
import numpy as np from sklearn.cluster import KMeans X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]]) kmeans = KMeans(n_clusters=2, random_state=0, init='random') kmeans.fit(X)
注意:这个错误不是每次都会出现!有时候运行完全正常,有时候就报错,概率大概50%,随机性很强。
我已经试过了网上能找到的各种解决方案,但都没效果:
- 更换
init参数(比如换成默认的k-means++),问题依旧 - 安装过不同版本的依赖库,确保它们之间版本兼容,还是会随机报错
- 用
faulthandler定位到错误肯定是在kmeans.fit(X)这一行触发的 - 甚至从源码编译了scikit-learn 1.7.dev0版本,想看看是不是修复了这个问题,但结果还是一样
- 另外发现MiniBatchKMeans也会出现完全相同的随机报错,但其他聚类算法比如Agglomerative Clustering、DBSCAN,以及其他库的聚类实现(比如HDBSCAN、faiss的Kmeans、scipy.cluster.vq的kmeans/vq)都能正常运行,完全没问题
现在我实在没辙了,感觉这会不会是scikit-learn的内部bug?有没有人遇到过类似的问题,或者有什么我没尝试过的解决思路?
备注:内容来源于stack exchange,提问作者fabrizio norcia
相关产品推荐
相关产品推荐

