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

如何按类别标签手动拆分数据集为指定比例的训练集与测试集

实现方案

你要的是按类别分层拆分数据集的效果,有两种常用实现方式:

方案1:直接用train_test_split的分层参数

你之前用train_test_split没实现需求是因为没开启分层参数,只要传入stratify参数指定标签列,就能自动保证训练集、测试集里每个类别的比例和原数据集完全一致:

from sklearn.model_selection import train_test_split
# 假设X是特征矩阵,y是对应的类别标签,test_size是测试集占比
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, stratify=y, random_state=42)

注:random_state参数用来固定随机种子,保证拆分结果可复现。

方案2:手动按类别拆分(自定义程度更高)

如果需要对每个类别的拆分逻辑做自定义调整,可以遍历每个类别单独拆分后再合并:

import pandas as pd
from sklearn.model_selection import train_test_split

# 假设数据集A是DataFrame格式,label_col为类别列的列名
def split_by_class(dataset, label_col, test_size=0.5):
    train_dfs = []
    test_dfs = []
    # 遍历每个类别单独执行拆分
    for label in dataset[label_col].unique():
        class_df = dataset[dataset[label_col] == label]
        class_train, class_test = train_test_split(class_df, test_size=test_size, random_state=42)
        train_dfs.append(class_train)
        test_dfs.append(class_test)
    # 合并所有类别的训练集、测试集
    train_df = pd.concat(train_dfs).reset_index(drop=True)
    test_df = pd.concat(test_dfs).reset_index(drop=True)
    return train_df, test_df

# 调用示例:按50%比例拆分训练集和测试集
train_set, test_set = split_by_class(A, label_col="你的类别列名", test_size=0.5)

普通场景用方案1足够满足需求,如果有特殊的类别拆分规则可以基于方案2调整逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:54:03