我正在使用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))
我希望对模型在真实数据上的表现有最好的理解,但我还没有找到确凿的答案!
处理不平衡数据的拇指规则是“永远不要平衡测试数据”。处理不平衡数据的渠道:
这样你就可以获得实际的表现。
这里出现的问题是为什么不在列车测试分割前平衡数据?
当您在现实世界中部署时,您不能指望现实世界数据得到平衡......
更好的方法是在步骤2使用K-fold并对每个折叠进行3,4,5步骤
有关详细信息,请参阅this文章。