首页 > 解决方案 > 为每个类拆分具有相等行数的训练数据

问题描述

我有一个非常大的数据集,大约 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 行。我该怎么做?

标签: pythonmachine-learningscikit-learn

解决方案


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

  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_1&X_train_sample_class_0来形成一个具有平衡数据集的新数据集


推荐阅读