0

最近,我正在研究Random Forest一些Java. 我的教授让我加载Random Forest她给我的模型并打印出它的规则。

由于我需要打印详细的规则(我相信,这是一个未提供的功能Random Forest),我必须更改一些代码。但是,在我更改代码后,Java 序列化不允许我完美加载模型,总是有一些Null Pointer Exception.

我认为,根据Javadoc,如果我只更改源代码的一些小部分,我应该被允许加载到模型中,为了最大限度地减少更改,我只将一些private或更改protectedpublic. 这样我就可以访问课程的详细信息,但即使是这种更改也不令人满意。

我希望有人能给我一些关于这些的线索:

  1. 如果我只将一些更改protectedpublic,则可以进行反序列化,对吗?
    另外,如果我仍然有一些未更改的内容,我想可能会有一些问题protected,但这肯定会引发编译错误,对吧?我是否需要在代码中搜索一些潜在的未更改protected

  2. 有没有更好的方法来打印Random Forest规则?

我已经在这个问题上工作了两个星期,我真的希望有人能帮助我解决这个问题。

异常的源代码是:

 int maxIndex = Utils.maxIndex(m_Distribution[0]);

它位于这些代码的第 656 行
https://github.com/HaohanWang/WekaRandomForest/blob/master/src/weka/classifiers/trees/RandomTree.java

除了更改之外,我没有做任何更改protectedpublic但我在新包中添加了另一个类,以通过以下代码打印规则:

if (m_classifier.m_bagger.m_Classifiers == null) {
        System.out.println("Bagging: No model built yet.");
    } 
else {
        StringBuffer text = new StringBuffer();
        text.append("All the base classifiers: \n\n");
        for (int i = 0; i < m_classifier.m_bagger.m_Classifiers.length; i++)
            if (m_classifier.m_bagger.m_Classifiers[i] == null) {
                System.out.println("Oh, aaaaa");
            } else {
                text.append(m_classifier.m_bagger.m_Classifiers[i]
                        .toString() + "\n\n");
            }
        }
        //System.out.println(text.toString());
    }
4

0 回答 0