【发布时间】:2019-09-19 03:16:06
【问题描述】:
我正在使用 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))
我想对模型在真实数据上的表现有最好的了解,但我还没有找到确切的答案!
【问题讨论】:
-
您好!一般来说,训练集应该是平衡的,否则你的准确性会大幅下降。关于测试/验证集,这不是必需的,但在拆分为训练/验证/测试之前平衡该集可能更容易。我明白您关于不切实际数据的观点,但是如果您使用混淆矩阵研究准确性,您会立即看到较小类别的准确性在数据集不平衡时显着下降
-
@nickthefreak 没错!我最终可能会尝试平衡和不平衡测试/验证这两种方法,看看效果。
标签: python machine-learning scikit-learn random-forest