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

Python使用imblearn过采样时如何按列表动态命名输出数据集

Python 中不推荐直接生成动态变量,最优方案是用字典存储键值对,键为你指定的数据集名称,值为采样后的数据集对象,后续通过键名即可直接调取对应数据。

原代码问题

  • 存在多处拼写错误:os_y_train_lust应为os_y_train_list、overampling_list应为oversampling_list、over_sampling_list应为oversampling_list
  • 最初将数据集名称字符串存入列表,后续循环又直接覆盖了列表对应位置的取值为采样后的数据,无法保留名称与数据的映射关系

修正后代码(推荐方案)

import imblearn.over_sampling as imbos

# 配置过采样方法列表
oversampling_list = ['RandomOverSampler', 'SMOTE']
# 用字典存储采样后的数据集,key为名称,value为数据
resample_dataset = {}

# 替换为你实际的原始训练数据
X_train = ... 
y_train = ... 

for sampler_name in oversampling_list:
    print(f'Oversampling using {sampler_name}')
    # 动态获取采样器类
    sampler_cls = getattr(imbos, sampler_name)
    # 执行过采样
    X_res, y_res = sampler_cls().fit_resample(X_train, y_train)
    # 按指定名称存入字典
    resample_dataset[f'{sampler_name}_X_train_resample'] = X_res
    resample_dataset[f'{sampler_name}_y_train_resample'] = y_res

调用方式

后续需要调用对应数据时直接取值即可,例如调取SMOTE采样后的特征集:resample_dataset['SMOTE_X_train_resample']


不推荐的动态变量方案(仅做参考)

如果确实需要生成可直接调用的全局变量(容易污染命名空间、引发不可预知的错误,强烈不推荐),可以用以下方式实现:

for sampler_name in oversampling_list:
    sampler_cls = getattr(imbos, sampler_name)
    X_res, y_res = sampler_cls().fit_resample(X_train, y_train)
    globals()[f'{sampler_name}_X_train_resample'] = X_res
    globals()[f'{sampler_name}_y_train_resample'] = y_res

之后可直接写SMOTE_X_train_resample调取对应数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:36:01