【问题标题】:giving weight to some instance will result in a huge change in precision赋予某些实例权重将导致精度发生巨大变化
【发布时间】:2016-03-26 18:14:00
【问题描述】:

我有一个数据集,其中包含许多 0 类实例和一些极少数 1 类实例,这是一个问题,因为 0 类实例将支配 1 类实例,并且类的精度非常低1. 我正在使用 weka java API,在 API 中我发现了一个为实例赋予权重的选项,因此我决定对我的测试集中具有类 1 的实例赋予权重,如下所示:

breader = new BufferedReader(new FileReader("weka/train.txt"));
    Instances train = new Instances(breader);
    train.setClassIndex(train.numAttributes() - 1);
    Instances testset= new Instances(new BufferedReader(new FileReader("weka/test.txt")));
    unlabeled.setClassIndex(testset.numAttributes() - 1);
    for (int i = 0; i < testset.numInstances(); i++) {
        if(testset.instance(i).classValue()==1){
            testset.instance(i).setWeight(30);
        }

    }

这样做之后,精度提高了很多。现在我想知道我正在做的事情是否可以接受,如果可以,如何推理?

【问题讨论】:

    标签: machine-learning classification weka


    【解决方案1】:

    您必须考虑到,您添加到实例的权重会影响您的预测模型。该案例的预测模型也将很重。由于奇怪的训练,您可能会陷入过度拟合。存在过拟合的可能性,因为用于训练模型的标准可能与用于判断模型功效的标准不同。但是,如果您无法获得更多的训练数据,则可以承担风险。毕竟它对你有用。

    【讨论】:

    • 非常感谢,所以你注意到我将这个权重添加到我的测试集而不是训练集,所以你觉得有意义吗?
    • 在这种情况下,您将获得基于您给实例的权重的准确度。您可以将它用于您知道某些实例比其他实例更重要的特定情况,但这并不能取代不平衡数据。在您的特定情况下提高精度是因为您的模型可以更好地预测具有类 1 的实例。如果它对您更重要,那么是的,重量很好用。相反,如果对你来说预测 class0 和 class1 一样重要,那么权重就没有很好地使用。你会得到一个虚构的精度。
    猜你喜欢
    • 2018-09-14
    • 1970-01-01
    • 2015-09-30
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多