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



我正在使用sklearn GridSearchCv来找到一个随机森林的最佳参数,用于使用4个类(建筑物,植被,水和道路(应用于遥感数据时,问题是我有一个与其他课程相比,"植被"的课程要多(我的意思是数千到数百万的差异(。我应该平衡测试数据集以获取指标吗?

我已经平衡了整个集合,然后再分成培训和测试,这意味着两个数据集都以平等的方式具有相同的类别分布。恐怕这并不代表该算法在真实数据上的性能,但它使我可以深入了解每个类别的性能。如果我使用不平衡的数据,"植被"类可能最终会与其他平均值混乱。

这是我所做的余额的示例,因为您可以看到我直接在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. 做预处理
  2. 应用火车测试拆分(分层(。
  3. 平衡培训数据(通常效果更好(
  4. 火车模型/模型
  5. 测试不平衡测试数据(显然使用诸如F-SCORE,精度,召回的指标(

,您将获得实际的性能。

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

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

更好的方法是在步骤2使用k折,并对每个折叠进行3,4,5步骤

请参阅本文以获取更多信息。

最新更新