更改源代码后,Java中的Weka无法加载到模型中
最近,我正在研究更改源代码后,Java中的Weka无法加载到模型中,java,serialization,weka,random-forest,Java,Serialization,Weka,Random Forest,最近,我正在研究Java的一些Random Forest模型。我的教授让我加载她给我的随机森林模型,并打印出它的规则 因为我需要打印详细的规则(我认为这是随机林没有提供的功能),所以我必须更改一些代码。但是,在我更改了代码之后,Java序列化不允许我完美地加载模型,总是存在一些空指针异常 我认为,根据Javadoc,如果我只更改了源代码的一些小部分,我应该被允许加载到模型中,为了最小化更改,我只将一些private或protected更改为public。这样我就可以访问类的详细信息,但即使这种更
Java
的一些Random Forest
模型。我的教授让我加载她给我的随机森林
模型,并打印出它的规则
因为我需要打印详细的规则(我认为这是随机林
没有提供的功能),所以我必须更改一些代码。但是,在我更改了代码之后,Java序列化不允许我完美地加载模型,总是存在一些空指针异常
我认为,根据Java
doc,如果我只更改了源代码的一些小部分,我应该被允许加载到模型中,为了最小化更改,我只将一些private
或protected
更改为public
。这样我就可以访问类的详细信息,但即使这种更改也不能令人满意
我希望有人能给我一些关于这些的线索:
受保护的
更改为公共
,则可以执行反序列化,对吗?另外,我想如果我仍然有一些
受保护的未更改,可能会出现一些问题,但这肯定会引起编译错误,对吗?我是否需要在代码中搜索一些潜在的未更改的受保护的
随机林
规则 int maxIndex = Utils.maxIndex(m_Distribution[0]);
它位于这些代码的第656行除了将
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());
}
if(m_-classifier.m_-bagger.m_-Classifiers==null){
System.out.println(“打包:还没有建立模型”);
}
否则{
StringBuffer text=新的StringBuffer();
append(“所有基本分类器:\n\n”);
对于(int i=0;i
包括引发异常的代码。并添加详细信息来解释您的尝试。通过将方法从“受保护”更改为“公共”,您是否试图访问单个随机树?这似乎是开始打印规则的合乎逻辑的做法。如果是这样的话,您能否编写自己的方法来获取“m_分类器”,并将其添加到Weka的RandomForest类中?@Renaissance谢谢,我已将代码和我的代码粘贴在这里。@Walter谢谢,是的,我尝试访问每棵树。我只是把代码放在上面,请看一下