【问题标题】:How does Stratified Sampling Work in WekaWeka 中的分层抽样如何工作
【发布时间】:2021-12-25 15:42:39
【问题描述】:

我有一个数据集。我想使用分层采样拆分数据集。我想要 70% 的数据在训练集中,30% 在测试集中。所以我在 weka 中使用StratifiedRemoveFold 过滤器将数据集拆分为 10 个相等的子集。然后我追加 7 个数据集以制作 70% 的训练数据集,并追加其余 3 个数据集以制作 30% 的训练数据集。但是,这不是一个好的选择。我发现,对于 test test 的第一个属性,缺少一个值。就像,我的第一个属性有 7 个值。但是测试集中的第一个属性只有 6 个值。结果,当我在训练集上运行分类器时,出现错误Training set and Test set are incompatible

我浏览了链接Stratified Sampling in WEKA。我发现if I want to generate a 5% subsample, set the folds to 20. 如果这是策略,那么对于 30% 的测试集,我是否需要设置 numberofFoldStratifiedRemoveFold 过滤器 = 120?还有测试集呢?在测试集占整个数据集 70% 的测试集中,我应该设置多少折数?

【问题讨论】:

    标签: data-science weka sampling


    【解决方案1】:

    您可以尝试使用有监督的重采样 (weka.filters.supervised.instance.Resample) 过滤器,无替换偏置因子为 0(使用输入数据的分布)。使用 invert 标志时,您将获得数据集的其余部分。

    【讨论】:

    • 是的,我可以试试。但这是我使用分层过滤方法划分数据集的项目要求。如何使用分层抽样将 70% 和 30% 分开?
    【解决方案2】:

    如果您真的想使用 StratifiedRemoveFolds,则使用 10 次折叠,应用过滤器 10 次以将所有 10 次折叠取出,然后将 7 次组合为您的 70%,其余部分为您的 30%。

    【讨论】:

    • 这个过程给了我上面描述的错误。
    • StratifiedRemoveFolds 不会修改数据集结构,它只对行进行操作。只要您将数据集保存为 ARFF,就可以了(我刚刚使用 anneal UCI 数据集进行了测试)。
    • 您创建了多少子样本?您是否从退火数据集中删除了缺失值?我在 iris 数据集中使用了 StratifiedRemoveFolds 过滤器,这是 weka 的默认数据集。将数据集分成 10。我得到了那些错误 Train and test set is not compatible。您想在继续之前自动将分类器包装在“InputMappedclassifie”中吗 如果我按否。我得到了第二个错误问题评估分类器。训练集和测试集不兼容。类索引不同 5!=83
    • 我为 10 个不同的折叠调用了 StratifiedRemoveFolds 过滤器 10 次(每次都来自原始数据集,每次都相应地更新折叠参数)。它们都具有相同的结构。退火数据集有一个标签“?”并且没有缺失值(anneal.orig 有缺失值 - 请参阅 Weka download)。你一定是做错了什么,才能得到一个从 iris 派生的数据集,它有 83 个属性(不正确)和一个有 5 个属性(正确)。
    • 是的,分别提取每个折叠。因此运行 10 次(很明显)。最简单的方法是使用文本编辑器组合 ARFF 文件的 @data 部分(它们只是文本文件)。否则,请使用 weka.core.Instances append(您已经知道)或自定义 Java/Groovy/Jython 代码。
    猜你喜欢
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    相关资源
    最近更新 更多