我正在使用WEKA来训练分类Java程序。最初有几个类别,比方说10个,系统必须使用这些初始类别并开始培训。为了做到这一点......:
String [] categories = {"cat1", "cat2", ..., "cat10"};
public SomeClassifier(String[] categories) {
// Creates a FastVector of attributes.
FastVector attributes = new FastVector(3);
// Add attribute for holding property one.
attributes.addElement(new Attribute(P1_ATTRIBUTE, (FastVector) null));
// Add attribute for holding property two.
attributes.addElement(new Attribute(P2_ATTRIBUTE, (FastVector) null));
// Add values attribute.
FastVector values = new FastVector(categories.length);
for (int i = 0; i < categories.length; i++) {
values.addElement(categories[i]);
}
attributes.addElement(new Attribute(CATEGORY_ATTRIBUTE, values));
// Create dataset with initial capacity of 25, and set index
Instances myInstances = new Instances(SOME_NAME, attributes, 25);
myInstances.setClassIndex(myInstances.numAttributes() - 1);
}
好的,现在,时间过去了,我想在我的训练集中添加一个新类别(比方说,“cat11”),这已经在训练中获得了一些成功。我怎么能做到这一点? WEKA文档说“一旦创建了一个属性,它就无法更改”。 所以,也许我可以从Instances对象中取出属性,重新创建属性然后再次插入它......或者那会搞砸一切吗?
提前致谢。
答案 0 :(得分:0)
好吧,显然,使用NaïveBayes的实现无法做到这一点。这是因为在初始化分类器时,附加到分类器的所有类别必须加1,并且当训练分类器时,具有概率!= 0的新类别将导致分类器以具有&gt;的和的奇怪方式运行。 1. Morevoer,分类器可以在类别数量的影响下初始化其算法(计算条件概率和迭代),并且在创建后添加新算法将意味着以某种方式重建算法。
所以,这留下了一个问题......我可以使用哪种分类机制,这可以让我随着时间的推移引入新的类别?