WEKA 中的神经网络

伊恩·西内尔

我有一个已经分类的文本数据集。我有 7 个可用的课程。

我在构建模型时使用了(Waikato Environment for Knowledge Analysis)WEKA。此外,我还训练并测试了 3 种不同的算法,以确定哪种算法最适合我的数据集。

我尝试了朴素贝叶斯、J48 和神经网络 (SMO),这些都可以在 WEKA 的机器学习环境中使用。

在训练和测试过程中,找出三种算法在准确性方面的排名,如下:

  1. 神经网络 - 98%
  2. 朴素贝叶斯 - 90%
  3. J48 - 85%

根据上述结果,我决定使用神经网络并构建模型。我在 JAVA 中创建了一个应用程序并加载了从 WEKA 构建的神经网络模型。

但是,我的问题是,该模型无法正确预测新数据。我有点困惑,因为在训练和测试期间我获得了很高的准确率,但在部署期间准确率只有 40%。

我尝试在 C# 中执行此操作并获得相同的结果。下面是我使用的示例代码。

   Instances test = null; 
   DataSource source = new DataSource("C:\\Users\\Ian\\Desktop\\FINAL\\testdataset.arff");
   test = source.getDataSet();
   test.setClassIndex(1); 

   FilteredClassifier cl1 = (FilteredClassifier) weka.core.SerializationHelper.read("C:\\FINAL\\NeuralNetworks.model");        
   Evaluation evaluation = new Evaluation(test);      
   evaluation.evaluateModel(cl1,test);
   System.out.println("Results:" + evaluation.toSummaryString());   


    for (int i = 0; i < test.numInstances(); i++) {
        String trueClassLabel = test.instance(i).toString(test.classIndex());
        double predictionIndex =cl1.classifyInstance(test.instance(i));

        String predictedClassLabel;
        predictedClassLabel = test.classAttribute().value((int) predictionIndex );
        System.out.println((i+1) + "\t" + trueClassLabel + "\t" + predictedClassLabel);
    }

任何建议你认为我做错了什么?

马库斯

在我们在评论中进行简短交谈后,在我看来很明显您对训练数据过度拟合。这很可能是由神经网络架构造成的,该架构对于您试图解决的问题来说过于强大。可以证明,任何函数都可以由具有足够自由度的神经网络表示。NN 并没有找到一个很好的泛化解决方案,而是在训练期间记住了训练数据,从而获得了近乎完美的准确性。但是一旦要处理新数据,它就不能很好地处理,因为它没有找到合适的泛化规则。为了解决这个问题,你必须降低神经网络的自由度。这可以通过减少每层中的层数和节点数来实现。尝试从只有 1 或 2 个节点很少的隐藏层开始。然后,

重要提示:始终使用独立的测试集来衡量性能,而不是使用您训练模型的相同数据。

您可以在此处找到有关此问题的更多提示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章