首页 > 解决方案 > 根据分类列拆分训练和测试集

问题描述

我有一个包含大约 25000 行和 32 列的数据框。我想将此数据集拆分为训练和测试测试(80/20)。但是,有些列是 1-hot 编码的。现在,在拆分数据时,我希望将每个 1-hot 编码列的相同比例放入训练集中。

col_1     col_2   ..  col_31    col_32
  1          0         0         0
  1          0         0         0
...
  0          0         1         0
  0          0         1         0

所以在训练集中应该有 80% 的行每列等于 1。我查看了 Sci-kit learn 中的不同拆分方法,但找不到可以满足我需求的方法。有没有人有解决方案或能够帮助我?

标签: pythonpandasscikit-learn

解决方案


初始化熊猫框架

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split

df = pd.DataFrame(np.random.randint(0,2, size=(100, 32)))

设置 1-hot-encoded = True/False if count(no.of.zero in a row) == 1

df['1-hot-encoded'] =  df.apply(lambda row: True if np.count_nonzero(row) == 1 else False, axis=1)

在保持 1-hot-encoded 比率的同时进行拆分

train, test = train_test_split(df, test_size=0.2, stratify=df['1-hot-encoded'])

推荐阅读