toString()在不相关的更改后不工作。我在Java的WEKA中找不到toString()
最近我正在开发WEKA,输出随机森林的详细规则。toString()在不相关的更改后不工作。我在Java的WEKA中找不到toString(),java,weka,tostring,Java,Weka,Tostring,最近我正在开发WEKA,输出随机森林的详细规则。 我正在处理的类具有以下层次关系: public class RandomForest extends Classifier { public Bagging m_bagger; public String toString(){ return "other"+m_bagger.toString(); } } public class Bagging extends Rando
我正在处理的类具有以下层次关系:
public class RandomForest extends Classifier {
public Bagging m_bagger;
public String toString(){
return "other"+m_bagger.toString();
}
}
public class Bagging extends RandomizableIteratedSingleClassifierEnhancer{
// no relative declaration
public String toString(){
return "other"+m_Classifiers[i].toString(); //changes I made
}
}
public abstract class RandomizableIteratedSingleClassifierEnhancer extends IteratedSingleClassifierEnhancer {
// no relative declaration
// no toString()
}
public abstract class IteratedSingleClassifierEnhancer extends SingleClassifierEnhancer{
public Classifier[] m_Classifiers;
// no toString()
}
public abstract class SingleClassifierEnhancer extends Classifier{
protected Classifier m_Classifier = new ZeroR();
// no toString()
}
public abstract class Classifier{
// no toString()
}
在我更改之前,代码运行良好。在我更改它之后,如果我读入数据并亲自训练一个WEKA模型,它也会工作得很好。
但是,如果我加载教授给我的模型,然后运行toString(),它会报告以下行:
java.lang.NullPointerException
at weka.classifiers.trees.RandomTree.leafString(RandomTree.java:656)
at weka.classifiers.trees.RandomTree.toString(RandomTree.java:678)
at weka.classifiers.trees.RandomTree.toString(RandomTree.java:707)
at weka.classifiers.trees.RandomTree.toString(RandomTree.java:700)
它无限重复这些行,直到我的内存耗尽
我已经调试并发现错误在
m_Classifiers[i].toString()
相关代码为(随机森林类):
它工作得很好。出于同样的原因,我不认为m_分类器可以为空
我将一些“受保护”更改为“公共”,但在进行此更改之前,它不起作用 为了回应Jim的评论,下面是
RandomTree.java
很抱歉,我没有在这里粘贴代码,因为从第626行到第715行大约有100行相对代码
eclipse错误中实际上有更多的行,与第656行、第678行、第700行、第707行和第642行相关。所有这些行都在调用
leafString()
或toString(int)
现在我猜我的问题是我没有一个合适的int来表示
toString(int)
第656行是
int maxIndex = Utils.maxIndex(m_Distribution[0]);
因此,
m_分布
为空。如果m_Distribution[0]
为空,则错误将发生在Utils.maxIndex
中,我假设它是一个静态方法。显示引发异常的完整语句。如果在m\u分类器[i].toString()
中获得NPE,唯一的可能性是m\u分类器[i]
为空或m\u分类器
为空。既然你说第二个不是这样,那么它一定是第一个,那么存储在m\u Classifiers[i]
的引用值为空。谢谢,@JimGarrison我已经更新了完整的语句。但是,我在运行m_分类器[I].debugTipText()时会得到结果。因此,我认为m_分类器[I]
为空可能不是问题所在。ThanksSomewhere在类层次结构中有一个依赖于内部状态为null的toString()
。weka.classifiers.trees.RandomTree.leafString(RandomTree.java:656)上有什么内容?
?Hi@JimGarrison请看这篇文章,我在末尾添加了代码和一些解释。第656行是int-maxIndex=Utils.maxIndex(m_分布[0])代码>--因此m_分布
为空。如果m_Distribution[0]
为空,则错误将发生在Utils.maxIndex
内部(我假设Utils.maxIndex()
是一个静态方法)。
m_Classifiers[i].debugTipText()
int maxIndex = Utils.maxIndex(m_Distribution[0]);