我正在使用 J48 对由数值和标称值组成的实例进行分类。 我的问题是我不知道在程序中会遇到哪个标称值。 因此,我需要“即时”更新模型的名义属性数据。
例如,假设我只有两个属性,职业和年龄,运行如下: 职业属性 = {}。
<小时/>输入:[钢琴老师,22]。
OccuptaionAttribute = {钢琴老师}。
<小时/>输入:[学校老师,30]
OccuptaionAttribute = {钢琴老师、学校老师}。
<小时/>输入:[钢琴老师,40]
OccuptaionAttribute = {钢琴老师、学校老师}。
<小时/>等等
现在我尝试通过复制以前的属性、添加新属性然后更新模型的数据来手动执行此操作。 在训练模型时效果很好。
但是! 当我想要分类一个新实例时,例如[SW工程师,52],OccuptaionAttribute已更新: OccuptaionAttribute = {钢琴老师、学校老师、软件工程师},但树本身以前从未“见过”“软件工程师”,因此无法完成分类并抛出异常。
您能指导一下如何处理上述情况吗? Weka有没有机制支持上述问题?
谢谢!
最佳答案
训练时将占位符数据添加到您的名义属性中,例如 __other__
。
在尝试对实例进行分类之前,首先检查名义属性的值是否以前见过;如果不使用占位符值:
Attribute attribute = instances.attribute("OccuptaionAttribute");
String s = "SW engineer";
int index = attribute.indexOfValue(s);
if (index == -1) {
index = attribute.indexOfValue("__other__");
}
当您有足够的数据再次使用新值进行训练时。
关于machine-learning - 对新的名义实例进行分类时更新数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13660137/