【问题标题】:Updating the data-set when classifing new nominal instances对新的名义实例进行分类时更新数据集
【发布时间】:2012-11-19 13:18:27
【问题描述】:

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

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


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

OccuptaionAttribute = {钢琴老师}。


输入:[学校老师,30]

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


输入:[钢琴老师,40]

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


等等

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

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

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

谢谢!

【问题讨论】:

    标签: machine-learning data-mining weka


    【解决方案1】:

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

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

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

    【讨论】:

    • 首先,非常感谢! :) 但是我有一个以下问题,如果可以的话-如果我将使用 Weka 给出的 MissingValue 而不是“占位符数据”,它会产生其他影响吗?
    • 是的,您可以使用缺失数据代替占位符数据。只是猜测:如果您的训练集不包含任何具有占位符数据的实例,则具有缺失数据或占位符数据的新实例将被视为最可能的数据。
    猜你喜欢
    • 2015-06-10
    • 1970-01-01
    • 2021-10-27
    • 2013-03-09
    • 1970-01-01
    • 2015-01-27
    • 2015-02-01
    • 2010-09-30
    • 2020-05-18
    相关资源
    最近更新 更多