在分类新的名义实例时更新数据集

时间:2012-12-01 13:56:14

标签: machine-learning data-mining weka

我正在使用J48对由数值和名义值组成的实例进行分类。 我的问题是我不知道在我的程序中我会遇到哪个名义价值。 因此,我需要“动态”更新我的名义属性的模型数据。

例如,假设我只有2个属性,职业和年龄,并且运行如下: OccuptaionAttribute = {}。


输入:[钢琴老师,22]。

OccuptaionAttribute = {钢琴老师}。


输入:[学校老师,30]

OccuptaionAttribute = {钢琴老师,学校老师}。


输入:[钢琴老师,40]

OccuptaionAttribute = {钢琴老师,学校老师}。


现在我尝试通过复制先前的属性,添加新属性然后更新模型的数据来手动执行此操作。 当训练模型时,这种方法很有效。

但是! 当我想分类一个新实例时,比如说[SW工程师,52],OccuptaionAttribute已更新: OccuptaionAttribute = {钢琴教师,学校教师,SW工程师},但树本身从未“遇见”“SW工程师”,因此无法实现分类并抛出异常。

你能指导如何处理上述情况吗? Weka有没有任何机制支持上述问题?

谢谢!

1 个答案:

答案 0 :(得分:1)

培训时,将占位符数据添加到__other__等名义属性中。 在尝试对实例进行分类之前,首先检查是否先看到名义属性的值;如果它不使用占位符值:

Attribute attribute = instances.attribute("OccuptaionAttribute");
String s = "SW engineer";
int index = attribute.indexOfValue(s);
if (index == -1) {
    index = attribute.indexOfValue("__other__");
}

如果您有足够的数据训练使用新值。