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

imblearn采样并行n_jobs参数弃用后的替代方案问询

imblearn采样器n_jobs参数弃用问题

我在使用imbalanced-learn(imblearn)库的过采样/欠采样器时,给n_jobs=x参数传入整数来开启并行运行,会弹出未来弃用警告:

FutureWarning: The parameter n_jobs has been deprecated in 0.10 and will be removed in 0.12. You can pass an nearest neighbors estimator where n_jobs is already set instead

请问是不是应该停止给n_jobs传整数,转而传入已经设置好n_jobs的sklearn.neighbors.KNeighborsClassifier实例?就像下面示例代码里做的那样(实测能带来约10%的速度提升)。除此之外还有其他需要注意的地方吗?

最小可复现代码(MRE)

from imblearn.over_sampling import SMOTE
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, GridSearchCV

# 创建样本数据
# 参数设置
N = 500000
n_features = 200

X, y = make_classification(n_samples=N,
                           n_features=n_features,
                           n_clusters_per_class=1,
                           weights=[0.99],
                           flip_y=0,
                           random_state=1)

X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y)

%%timeit -n 5 
sampler = SMOTE()
global X_train, y_train
_, _ = sampler.fit_resample(X_train,y_train)

knn = KNeighborsClassifier(n_jobs=3)

%%timeit -n 5 
global X_train, y_train, knn
sampler = SMOTE(k_neighbors=knn)
_, _ = sampler.fit_resample(X_train,y_train)

解决方案与注意事项

1. 替代方案的正确性

没错,警告信息已经明确给出了方向:从imblearn 0.10版本开始,n_jobs参数已被弃用,0.12版本会彻底移除。正确的做法就是像你示例中那样,传入预先设置好n_jobs的近邻估计器实例(比如KNeighborsClassifier或KNeighborsRegressor,具体根据采样器需求选择)。这种方式不仅能实现并行加速,还能让你更灵活地控制近邻计算的其他参数(如metric、leaf_size等)。

2. 其他需要注意的点

  • 匹配采样器的近邻类型要求:不同采样器对近邻估计器的类型有要求,比如SMOTE类采样器(SMOTE、ADASYN等)默认使用KNeighborsClassifier,部分欠采样器(如NearMiss)也有对应类型要求,要确保传入的实例符合采样器规范,避免报错。
  • 避免参数冲突:如果传入的近邻实例已经设置了n_neighbors,采样器本身的k_neighbors参数会被忽略,所以要统一近邻数量的设置,不要两边重复配置导致混淆。
  • 合理分配并行资源:n_jobs设置的并行任务数不要超过CPU核心数,否则会增加上下文切换开销,反而降低运行速度。比如CPU有4核,设置n_jobs=3是合理的,设成8就没必要了。
  • 版本兼容问题:如果需要兼容旧版imblearn,可以做分支判断,但建议尽早迁移到新写法,避免后续版本升级后代码报错。
  • 优化代码结构:示例中使用了global关键字,实际项目里尽量避免,建议把数据和采样逻辑封装成函数,代码更清晰也不易出问题。

内容的提问来源于stack exchange,提问作者Björn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:20:16