根据分类列拆分训练和测试集

时间:2020-05-25 11:49:11

标签: python pandas scikit-learn

我有一个包含约25000行和32列的数据框。我想将此数据集分为训练和测试测试(80/20)。但是,某些列是1热编码的。现在,在分割数据时,我希望将每个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学习中了解了不同的拆分方法,但是找不到能够满足我需要的拆分方法。有没有人提供解决方案或可以帮助我的人?​​

1 个答案:

答案 0 :(得分:0)

初始化大熊猫框架

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编码=如果计数(连续零个数)== 1,则为true / false

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

在保持1-hot编码比率的同时进行分割

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