SMOTEENN在2000行小数据集上无限运行无结果求助
问题分析:SMOTEENN在小数据集上无限运行且CPU无负载的原因
问题背景
环境配置:sklearn '1.1.3'、imblearn '0.9.1'、Python '3.10.8'
数据集规模:仅2000行
执行代码:smt = SMOTEENN(random_state=42, n_jobs = -1) X_train_SMOTE, y_train_SMOTE = smt.fit_resample(X_train, y_train)问题现象:单元格无限运行(等待1小时后终止),无结果无报错,运行期间CPU无负载,重装imblearn无效
可能的原因及排查方向
多进程参数引发的死锁
imblearn 0.9.1与sklearn 1.1.3的多进程调度存在兼容性问题。设置n_jobs=-1时,SMOTEENN内部的SMOTE采样和ENN清洗步骤可能在进程通信时陷入死锁,小数据集下进程启动的额外开销会放大这个问题,导致CPU无实际任务执行。建议先将n_jobs改为1,禁用多进程后重新测试。数据异常导致的逻辑循环
检查数据集是否存在以下情况:- 特征包含NaN、无穷大值,SMOTEENN计算近邻时会陷入异常处理的无限循环;
- 少数类样本量极低(如仅1-2个),ENN步骤在清洗合成样本时出现逻辑迭代死循环;
- 特征维度极高且存在严重共线性,导致近邻计算的数值稳定性问题,引发进程挂起。
可通过X_train.isna().sum()、np.isinf(X_train).sum()排查异常值,用y_train.value_counts()统计类别分布。
版本兼容性bug
imblearn 0.9.x系列对sklearn 1.1.x的适配存在未修复的问题。建议调整版本组合:要么降级sklearn到1.0.x版本,要么升级imblearn到0.10.x版本(如imblearn 0.10.1适配sklearn 1.2.x),确保两者版本匹配。运行环境的进程阻塞
Jupyter Notebook等交互式环境下,多进程可能因内核与子进程的通信机制阻塞。尝试在普通Python脚本中运行代码,而非Notebook单元格;同时检查系统内存是否充足,高维度小数据集也可能因内存交换频繁导致进程假死。
内容的提问来源于stack exchange,提问作者joe.somewhere
相关产品推荐
相关产品推荐

