最近,我正在研究Random Forest
一些Java
. 我的教授让我加载Random Forest
她给我的模型并打印出它的规则。
由于我需要打印详细的规则(我相信,这是一个未提供的功能Random Forest
),我必须更改一些代码。但是,在我更改代码后,Java 序列化不允许我完美加载模型,总是有一些Null Pointer Exception
.
我认为,根据Java
doc,如果我只更改源代码的一些小部分,我应该被允许加载到模型中,为了最大限度地减少更改,我只将一些private
或更改protected
为public
. 这样我就可以访问课程的详细信息,但即使是这种更改也不令人满意。
我希望有人能给我一些关于这些的线索:
如果我只将一些更改
protected
为public
,则可以进行反序列化,对吗?
另外,如果我仍然有一些未更改的内容,我想可能会有一些问题protected
,但这肯定会引发编译错误,对吧?我是否需要在代码中搜索一些潜在的未更改protected
?有没有更好的方法来打印
Random Forest
规则?
我已经在这个问题上工作了两个星期,我真的希望有人能帮助我解决这个问题。
异常的源代码是:
int maxIndex = Utils.maxIndex(m_Distribution[0]);
它位于这些代码的第 656 行
https://github.com/HaohanWang/WekaRandomForest/blob/master/src/weka/classifiers/trees/RandomTree.java
除了更改之外,我没有做任何更改protected
,public
但我在新包中添加了另一个类,以通过以下代码打印规则:
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());
}