【问题标题】:Java - WEKA - Add new catergories to training setJava - WEKA - 向训练集添加新类别
【发布时间】:2012-08-12 17:50:19
【问题描述】:

我正在使用 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 对象中取出 Attribute,重新创建 Attribute,然后再次插入它……否则会搞砸一切吗?

提前致谢。

【问题讨论】:

    标签: java attributes weka instances


    【解决方案1】:

    好吧,显然,没有办法使用这种朴素贝叶斯实现来做这样的事情。这是因为在初始化分类器时,附加到分类器的所有类别的总和必须为 1,而在训练分类器时,概率 != 0 的新类别将导致分类器以总和 > 1 的奇怪方式运行。 ,分类器可能会根据类别数量的影响来初始化其算法(计算条件概率和迭代),并且在创建后添加一个新的将意味着以某种方式重建算法。

    那么,这留下了一个悬而未决的问题......我可以使用什么分类机制来让我随着时间的推移引入新的类别?

    【讨论】:

      猜你喜欢
      • 2016-04-04
      • 1970-01-01
      • 2013-01-21
      • 2015-01-13
      • 2016-11-12
      • 2012-11-16
      • 1970-01-01
      • 2012-12-04
      • 1970-01-01
      相关资源
      最近更新 更多