【问题标题】:How can I properly split imbalanced dataset to train and test set?如何正确拆分不平衡的数据集以训练和测试集?
【发布时间】:2019-12-05 08:57:40
【问题描述】:

我有一个航班延误数据集,并尝试在采样前将该数据集拆分为训练集和测试集。准时案件约占总数据的 80%,延误案件约占总数据的 20%。

在机器学习中,训练集和测试集大小的比例通常为 8:2。但是数据太不平衡了。所以考虑到极端情况,大部分列车数据是准时情况,大部分测试数据是延迟情况,准确性会很差。

所以我的问题是如何正确拆分不平衡的数据集来训练和测试集??

【问题讨论】:

    标签: python machine-learning train-test-split imbalanced-data


    【解决方案1】:

    您可以采取两种方法。

    1. 一个简单的方法:不对数据集进行预处理,而是对数据集进行仔细采样​​,以便两个类在测试和训练子集中以相同的比例表示。您可以先按类拆分,然后从两组中随机抽样。

      import sklearn
      
      XclassA = dataX[0]  # TODO: change to split by class
      XclassB = dataX[1]
      YclassA = dataY[0]
      YclassB = dataY[1]
      
      XclassA_train, XclassA_test, YclassA_train, YclassA_test = sklearn.model_selection.train_test_split(XclassA, YclassA, test_size=0.2, random_state=42)
      
      
      XclassB_train, XclassB_test, YclassB_train, YclassB_test = sklearn.model_selection.train_test_split(XclassB, YclassB, test_size=0.2, random_state=42)
      
      Xclass_train = XclassA_train + XclassB_train
      Yclass_train = YclassA_train + YclassB_train
      
    2. 一个更复杂的,可以说是更好的,你可以先尝试平衡你的数据集。为此,您可以使用多种技术之一(欠采样、过采样、SMOTE、AdaSYN、Tomek 链接等)。我建议您查看imbalanced-learn 包的方法。完成平衡后,您可以使用典型方法使用普通的测试/训练拆分,而无需任何额外的中间步骤。

    第二种方法更好,不仅从拆分数据的角度来看,而且从速度甚至训练模型的能力来看(对于严重不平衡的数据集,这不能保证有效)。

    【讨论】:

      【解决方案2】:

      可能仅仅通过使用训练和测试的比率,您可能无法获得正确的预测和结果。

      如果您正在处理不平衡的数据集,您应该尝试重新采样技术以获得更好的结果。在数据集不平衡的情况下,分类器总是“预测”最常见的类别,而不对特征进行任何分析。

      如果数据集不平衡,还可以使用不同的指标进行性能测量,例如 F1 分数等

      请通过下面的链接,它会让你更清楚。

      What is the correct procedure to split the Data sets for classification problem?

      Cleveland heart disease dataset - can’t describe the class

      【讨论】:

        【解决方案3】:

        从 50/50 开始,然后继续将设置更改为 60/40、70/30、80/20、90/10。宣布所有结果并得出一些结论。在我关于航班延误预测项目的一项工作中,我使用了 60/40 数据库并使用 MLP NN 获得了 86.8% 的准确度。

        【讨论】:

          猜你喜欢
          • 2020-12-05
          • 2016-05-30
          • 2018-06-04
          • 1970-01-01
          • 2017-11-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-01
          • 2022-10-23
          相关资源
          最近更新 更多