我正在使用J48对由数值和名义值组成的实例进行分类。 我的问题是我不知道在我的程序中我会遇到哪个名义价值。 因此,我需要“动态”更新我的名义属性的模型数据。
例如,假设我只有2个属性,职业和年龄,并且运行如下: OccuptaionAttribute = {}。
输入:[钢琴老师,22]。
OccuptaionAttribute = {钢琴老师}。
输入:[学校老师,30]
OccuptaionAttribute = {钢琴老师,学校老师}。
输入:[钢琴老师,40]
OccuptaionAttribute = {钢琴老师,学校老师}。
等
现在我尝试通过复制先前的属性,添加新属性然后更新模型的数据来手动执行此操作。 当训练模型时,这种方法很有效。
但是! 当我想分类一个新实例时,比如说[SW工程师,52],OccuptaionAttribute已更新: OccuptaionAttribute = {钢琴教师,学校教师,SW工程师},但树本身从未“遇见”“SW工程师”,因此无法实现分类并抛出异常。
你能指导如何处理上述情况吗? Weka有没有任何机制支持上述问题?
谢谢!
答案 0 :(得分:1)
培训时,将占位符数据添加到__other__
等名义属性中。
在尝试对实例进行分类之前,首先检查是否先看到名义属性的值;如果它不使用占位符值:
Attribute attribute = instances.attribute("OccuptaionAttribute");
String s = "SW engineer";
int index = attribute.indexOfValue(s);
if (index == -1) {
index = attribute.indexOfValue("__other__");
}
如果您有足够的数据训练使用新值。