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

Python中如何将自定义数据集添加到imblearn导入的数据集列表

自定义数据集复用现有不平衡处理测试代码的方法

你不需要修改imblearn库的源码往内置fetch_datasets里硬塞数据,只要把自定义数据包装成和内置数据集一致的结构,就能100%复用你写好的循环逻辑,操作步骤如下:

第一步:先明确内置数据集的结构

imblearn通过fetch_datasets()返回的是一个字典,每个键对应数据集名称,值是一个带两个属性的对象:

  • .data:二维特征矩阵,形状为(样本数, 特征数),要求全为数值型、无缺失值
  • .target:一维标签向量,形状为(样本数,),二分类任务下正负类编码不管是0/1还是-1/1都能被imblearn采样器兼容

第二步:加载并预处理自己的数据集

先把你的自定义数据集加载成特征矩阵和标签向量的格式,举个最常见的读CSV的例子:

import pandas as pd
# 读取本地csv数据集,假设标签列的列名为class
df = pd.read_csv("你的本地数据集路径.csv")
# 拆分特征和标签
X_custom = df.drop(columns=["class"]).values  # 特征部分,去掉标签列
y_custom = df["class"].values  # 标签部分

# 提前做基础清洗:删掉有缺失值的行、把字符串类型的类别特征转成数值编码

第三步:把自定义数据集合并到数据集字典里

用Python自带的namedtuple快速构造和内置数据集结构一致的对象,直接加到内置数据集字典里即可,不需要改后续循环的核心逻辑:

from imblearn.datasets import fetch_datasets
from collections import namedtuple
# 你原来导入的其他库(train_test_split、MinMaxScaler、随机森林、各类欠采样器)保持不变

# 定义和imblearn内置数据集结构一致的数据结构
ImbDataset = namedtuple("ImbDataset", ["data", "target"])

# 加载所有内置数据集
all_datasets = fetch_datasets()
# 把自定义数据集加进去,给它起个好记的名字,比如my_credit_fraud
all_datasets["my_credit_fraud"] = ImbDataset(data=X_custom, target=y_custom)

# 数据集列表里直接加上自定义数据集的名字就行
datasets_ls = [
    "thyroid_sick",
    "my_credit_fraud"
]

第四步:微调原循环的数据集加载行

把原来循环里data = fetch_datasets()[dataset]这一行,改成从我们刚拼好的all_datasets里取数据即可,剩下的训练集测试集拆分、归一化、欠采样测试、随机森林效果验证的代码完全不用动:

# 原循环其他部分完全不变,只改加载数据的这一行
for dataset in datasets_ls:
    results_dict[dataset] = {}
    shapes_dict[dataset] = {}
    print(dataset)
    
    # 原来的data = fetch_datasets()[dataset] 改成下面这行
    data = all_datasets[dataset]

    # 下面的train_test_split、scaler、模型训练、欠采样循环逻辑全部原样保留即可
    X_train, X_test, y_train, y_test = train_test_split(
        data.data,  
        data.target, 
        test_size=0.3,
        random_state=0,
    )
    # ... 剩下的你原来写的代码全部不用改

常见踩坑提醒

  • 不要往特征里传字符串、日期这类非数值内容,提前做编码转换,不然归一化和模型训练都会报错
  • 标签必须是一维向量,这套代码默认跑二分类不平衡任务,多分类任务需要单独调整模型评估指标(比如原来的ROC-AUC要换成多分类版本)
  • 如果你已经提前把自定义数据集拆好了训练集和测试集,只要在循环里加个判断,自定义数据集直接用你拆分好的X_train/y_train/X_test/y_test即可,不用走train_test_split逻辑
  • 不需要修改imblearn的安装文件,上面的方法是运行时动态加载的,换环境只要把读自定义数据的路径改对就能跑,不会因为升级库丢失配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:06:26