数据高度不平衡时,我应该平衡测试集吗?

时间:2019-04-30 12:46:37

标签: python machine-learning scikit-learn random-forest

当我将Sklearn GridSearchCv应用于四类(建筑物,植被,水和道路)的遥感数据时,我正在使用随机森林找到最佳参数,问题是我的植被更多了”课程比其他课程(我的意思是说,相差数千到几百万)。我应该平衡测试数据集以获得指标吗?

在进行训练和测试之前,我已经平衡了整个集合,这意味着两个数据集以相同的方式分配了相同的类。恐怕这不能代表算法在实际数据上的性能,但可以让我深入了解每个类的性能。如果我使用不平衡数据,则“植被”类最终可能会与其他平均值混淆。

这是我做的余额示例,如您所见,我直接在X和y上执行此操作。哪些是完整的数据和标签。

if balance:
    smt = RandomUnderSampler(sampling_strategy='auto')
    X, y = smt.fit_sample(X, y)
    print("Features array shape after balance: " + str(X.shape))

我想对真实数据上模型的性能有最好的了解,但是我还没有找到最终的答案!

1 个答案:

答案 0 :(得分:2)

处理平衡数据的经验法则是“永远不要平衡测试数据”。 处理不平衡数据的管道:

  1. 进行预处理
  2. 应用训练测试分组(分层)。
  3. 平衡训练数据(通常SMOTE效果更好)
  4. 训练模型/模型
  5. 对不平衡测试数据进行测试(显然使用f-scorePrecision, Recall之类的指标)

这样您将获得实际的效果。

这里出现的问题是,为什么在火车测试分裂之前不平衡数据?

在现实世界中进行部署时,您不能期望现实世界中的数据得到平衡...

更好的方法是在第2步使用K折,然后对每折进行3、4、5步

有关更多信息,请参见this文章。