【问题标题】:Is there a way to define the fraction of each label I want in sci-kit learn cross validation?有没有办法在 sci-kit 学习交叉验证中定义我想要的每个标签的分数?
【发布时间】:2020-09-15 20:14:40
【问题描述】:

我编写了一个简单的 Python 脚本,它使用 sklearn.neural_network.MLPClassifier 和 sklearn.model_selection.GridSearchCV 对二进制分类数据进行预测,每个点都标记为 0 或 1。在训练数据中,大约 90% 的标记为 1 和10% 的标签为 0。在测试数据中,大约 35% 的标签为 1,65% 的标签为 0。这个比例是已知的,尽管标签是未知的。

我的模型目前过度拟合。我对训练数据的交叉验证分数是 85-90%,但我在测试集上运行代码时的分数低于 40%。

我想到的一种解决方法是,我可以尝试设置 GridSearchCV 来拆分数据,以便每个训练/验证集的标签比例与测试数据大致相同。然而,这似乎不是这个库的一个选项,而且我的 google-fu 没有返回任何关于其他 sci-kit 学习程序的结果。

是否有任何其他库我可以使用,或者我可以输入我没有设法找到的参数?谢谢。

【问题讨论】:

    标签: python scikit-learn cross-validation


    【解决方案1】:

    我建议使用imblearn 库,因为它提供了多种重新采样方法。我不知道您的数据集的大小或其他细节,但总的来说,我认为过采样策略应该比欠采样策略更受青睐。例如,您可以使用 SMOTE 对训练集中的 0 个标签进行过采样。 sampling_strategy 参数还允许您预先指定所需的比率。

    【讨论】:

    • 这似乎完美地回答了我的问题,谢谢。
    猜你喜欢
    • 2014-07-16
    • 2015-12-16
    • 2015-08-06
    • 2018-09-07
    • 2020-03-08
    • 2013-05-23
    • 2016-03-20
    • 2017-06-20
    • 1970-01-01
    相关资源
    最近更新 更多