为每个班级分配数量相等的培训数据

时间:2018-09-11 15:52:53

标签: python machine-learning scikit-learn

我有一个非常庞大的数据集,约有314554097行和3列。第三列是课程。数据集有两个0和1类。我需要将数据分为测试数据和训练数据。要分割数据,我可以使用

from sklearn.cross_validation import train_test_split . 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.75, random_state = 0)  

但是,数据集包含约99%的0类和仅1%的1类。在训练数据集中,我需要相等数量的0类和1类,例如两个类的30000行。我该怎么做?

2 个答案:

答案 0 :(得分:3)

您可能正在寻找解决不平衡数据的解决方案。这是您可以遵循的一些方法。

  1. 重新采样:(少数类数据点的过采样或多数类数据点的欠采样)
      

    在您的情况下,第1类是少数民族类

  2. 根据阶级失衡的比例赋予少数族裔更多的权重
  3. 选择正确的绩效指标。

但是如果您仍然需要30k的1类和0类数据点,请尝试以下操作:

X_train_sample_class_1 = X_train[X_train['third_column_name'] == 1][:30000]
X_train_sample_class_0 = X_train[X_train['third_column_name'] == 0][:30000]

现在您可以结合使用X_train_sample_class_1X_train_sample_class_0来形成一个具有平衡数据集的新数据集

答案 1 :(得分:0)

当我尝试以下操作时:

X_train_sample_class_1 = X_train[X_train['third_column_name'] == 1][:30000]
X_train_sample_class_0 = X_train[X_train['third_column_name'] == 0][:30000]

数据框是空的,没有值。请问如何用值分割?