python - 根据分类列拆分训练和测试集
问题描述
我有一个包含大约 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 中的不同拆分方法,但找不到可以满足我需求的方法。有没有人有解决方案或能够帮助我?
解决方案
初始化熊猫框架
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'])