0

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

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


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

OccuptaionAttribute = {钢琴老师}。


输入:[学校老师,30]

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


输入:[钢琴老师,40]

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


等等

现在我尝试通过复制以前的属性、添加新属性然后更新模型的数据来手动执行此操作。这在训练模型时效果很好。

但!当我想一个新实例进行分类时,比如说 [SW Engineer, 52],OccuptaionAttribute 已更新:OccuptaionAttribute = {Piano Teacher, School Teacher, SW Engineer},但树本身之前从未“遇到”“SW Engineer”所以分类无法实现并抛出异常。

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

谢谢!

4

1 回答 1

1

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

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

当您有足够的数据再次使用新值进行训练时。

于 2012-12-03T10:33:30.697 回答