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

imblearn库BorderlineSMOTE未生成合成数据及模块弃用咨询

BorderlineSMOTE未生成合成数据的问题排查

问题概述

使用imblearn的BorderlineSMOTE处理二分类数据集(由多分类转换而来,y为0/1)时,代码无报错但未生成任何合成数据,X_res与原X完全一致;但SVMSMOTE、SMOTENC可正常生成过采样数据。

是否弃用?

BorderlineSMOTE未被弃用,它仍是imbalanced-learn稳定版的正式模块。其核心逻辑是针对处于类别边界的少数类样本生成合成数据:通过统计少数类样本的k近邻中多数类样本的占比,将样本分为安全样本、边界样本和噪声样本,仅对边界样本执行过采样,避免生成靠近多数类的噪声数据。

可能原因及解决方法

1. 少数类样本数量不足

BorderlineSMOTE默认使用k_neighbors=5,如果少数类样本总数小于该值,无法找到足够的邻居来判定边界样本,也就不会生成合成数据。

  • 解决:检查少数类样本数量,若过少则降低k_neighbors参数(比如设为3):
    border_line = BorderlineSMOTE(random_state=42, k_neighbors=3)
    

2. 所有少数类样本均为“安全样本”

若少数类样本的k近邻中多数类样本占比低于阈值(默认下,borderline-1要求近邻中多数类占比≥50%),所有少数类样本会被判定为安全样本,BorderlineSMOTE不会对这类样本进行过采样。

  • 解决:
    • 尝试切换kind参数为borderline-2,该类型对边界样本的判定更宽松;
    border_line = BorderlineSMOTE(random_state=42, kind='borderline-2')
    
    • 调整m_neighbors参数(默认5),改变判定边界样本的邻居范围;
    • 手动分析少数类样本的分布,确认是否存在边界样本。

3. 参数不匹配数据集

默认参数可能不适合你的数据分布,可尝试组合调整k_neighbors、m_neighbors和kind参数,同时验证重采样前后的样本数量:

X=df.drop(['target'], axis=1)
y=df['target']

border_line = BorderlineSMOTE(random_state=42, k_neighbors=3, kind='borderline-2')
X_res, y_res = border_line.fit_resample(X, y)

# 输出样本数量对比,确认是否生成新数据
print(f"原样本量: {len(X)}, 重采样后样本量: {len(X_res)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:05:16