Java - WEKA - 为训练集添加新类别

时间:2012-08-16 11:29:40

标签: java attributes weka instances

我正在使用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对象中取出属性,重新创建属性然后再次插入它......或者那会搞砸一切吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

好吧,显然,使用NaïveBayes的实现无法做到这一点。这是因为在初始化分类器时,附加到分类器的所有类别必须加1,并且当训练分类器时,具有概率!= 0的新类别将导致分类器以具有&gt;的和的奇怪方式运行。 1. Morevoer,分类器可以在类别数量的影响下初始化其算法(计算条件概率和迭代),并且在创建后添加新算法将意味着以某种方式重建算法。

所以,这留下了一个问题......我可以使用哪种分类机制,这可以让我随着时间的推移引入新的类别?