当我有非常不平衡的数据时,我应该平衡测试集吗?

问题描述 投票:1回答:1

我正在使用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))

我希望对模型在真实数据上的表现有最好的理解,但我还没有找到确凿的答案!

python machine-learning scikit-learn random-forest
1个回答
2
投票

处理不平衡数据的拇指规则是“永远不要平衡测试数据”。处理不平衡数据的渠道:

  1. 做预处理
  2. 应用列车测试分割(分层)。
  3. 平衡训练数据(一般SMOTE效果更好)
  4. 火车模型/模型
  5. 测试不平衡测试数据(显然使用像f-scorePrecision, Recall这样的指标)

这样你就可以获得实际的表现。

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

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

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

有关详细信息,请参阅this文章。

© www.soinside.com 2019 - 2024. All rights reserved.