我正在使用 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))
我想最好地了解模型在真实数据上的表现,但我还没有找到确凿的答案!
最佳答案
处理不平衡数据的经验法则是“永远不要平衡测试数据”。 处理不平衡数据的流程:
- 进行预处理
- 应用训练测试拆分(分层)。
- 平衡训练数据(通常 SMOTE 效果更好)
- 火车模型
- 对不平衡测试数据进行测试(显然使用 f-score 、 Precision, Recall 等指标)
以便您获得实际性能。
这里出现的问题是为什么不在训练测试分割之前平衡数据?
当您在现实世界中部署时,您不能期望现实世界的数据是平衡的......
更好的方法是在步骤 2 中使用 K 折叠,并为每个折叠执行 3,4,5 步骤
引用this文章了解更多信息。
关于python - 当我有高度不平衡的数据时,我应该平衡测试集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55921286/