【问题标题】:Classfication accuracy on WekaWeka 中的分类准确度
【发布时间】:2016-06-23 07:36:06
【问题描述】:

我正在使用Weka GUI 进行分类。我是 Weka 的新手,对选项感到困惑

  • 使用训练集
  • 提供的测试集
  • 交叉验证

为了训练我的分类算法(例如 J48),我用交叉验证训练了 10 次,准确率非常好(97%)。当我测试我的分类时 - 准确率下降到大约 72%。我感到很困惑。请问有什么提示吗?我就是这样做的:

  • 我根据训练数据训练我的模型(例如:train.arff
  • 我在结果列表中右键单击要保存的模型的项目 选择保存模型并将其保存为例如j48tree.model

然后

  • 我加载了测试数据(例如:test.arff 通过提供的测试集按钮
  • 在Results列表中右击,我选择Load model,然后选择j48tree.model
  • 我选择了Re-evaluate model on current test set

是我做错了吗?为什么准确率从 97% 惨跌到 72%?还是只做 10 折的交叉验证就足以训练和测试分类器?

注意:我的训练和测试数据集具有相同的属性和标签。唯一的区别是,我有更多关于测试集的数据,我认为这不会有问题。

【问题讨论】:

    标签: machine-learning classification weka


    【解决方案1】:

    我认为您使用 WEKA 的方式没有任何问题。

    您提到您的测试集大于训练集?什么是分裂?通常的经验法则是测试集应该是整个数据集的 1/4,即比训练集小 3 倍,并且绝对不会更大。仅此一项就可以解释从 97% 下降到 72% 的原因,顺便说一句,这对于现实生活中的情况来说还不错。

    如果您建立学习曲线https://weka.wikispaces.com/Learning+curves 也会很有帮助,因为它将解释您是否有偏差或方差问题。从您的值来看,您的方差似乎很大(即数据集的参数太多),因此添加更多示例或更改训练集和测试集之间的划分可能会有所帮助。

    更新 我通过 randomforest 对有问题的数据集进行了快速分析,我的表现与作者发布的相似。详细信息和代码可在 gitpage http://omdv.github.io/2016/03/10/WEKA-stackoverflow

    【讨论】:

    • 我正在使用这个数据集(完整的训练数据集和完整的测试数据集):web.archive.org/web/20150205070216/http://nsl.cs.unb.ca/NSL-KDD。是的,你是对的,我的数据集中有 42 个特征
    • 我实际上下载了这个数据集,并用 python 的 scikit-learn 模块中的随机森林对其进行分类,性能非常好。我仍然不清楚的一件事是为什么您的测试集大于训练集?下载的集有大约 17:83 的拆分。我下载后做的是合并两组,随机选择20%作为测试集。正如我所说,性能很好。所以我的建议是——你需要调整训练集和测试集之间的分割。
    • 我利用这个机会,终于在我的 gitpage (torrinos.github.io/datascience/2016/03/10/…) 上发布了一些完成的东西。代码和细节都在那里。祝你好运。
    • 我将您的答案标记为accepted answer。你真棒!但不是二进制(异常和正常) - 我想使用多类标签,如下所示:web.archive.org/web/20150406000933/http://nsl.cs.unb.ca/NSL-KDD/…。是否可以使用多类标签更新您的答案?
    • 该脚本中的多类不会改变任何内容,因为 y-vector 正在被 pandas 分解,它只会有两个以上的因子。事实上,我只是从我自己正在处理的应用程序中提取部分内容,该应用程序包含三个结果类。
    猜你喜欢
    • 2013-12-02
    • 2021-06-01
    • 2018-10-01
    • 2015-06-15
    • 1970-01-01
    • 2015-04-28
    • 2018-10-09
    • 1970-01-01
    • 2016-01-12
    相关资源
    最近更新 更多