给某些实例赋予权重将导致精度发生巨大变化
giving weight to some instance will result in a huge change in precision
我有一个数据集,其中包含如此多的 class 0 实例和一些非常少的 class 1 实例,这是一个问题,因为 class 0 的实例将使用 class 1 控制实例并且 class 1 的精度非常低。我正在使用 weka java API 并且在 API 中我找到了一个选项给实例赋予权重,所以我决定在我的测试集中用 class 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);
}
}
这样做之后精度提高了很多。现在我想知道我正在做的事情是否可以接受,如果可以,我该如何推理?
您必须考虑到,您添加到实例的权重会影响您的预测模型。这些案例的预测模型也将很繁重。由于奇怪的训练,您可能会过度拟合。存在过度拟合的可能性是因为用于训练模型的标准可能与用于判断模型有效性的标准不同。但是,如果您无法获得更多的训练数据,您可以冒这个风险。毕竟它适合你。
我有一个数据集,其中包含如此多的 class 0 实例和一些非常少的 class 1 实例,这是一个问题,因为 class 0 的实例将使用 class 1 控制实例并且 class 1 的精度非常低。我正在使用 weka java API 并且在 API 中我找到了一个选项给实例赋予权重,所以我决定在我的测试集中用 class 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);
}
}
这样做之后精度提高了很多。现在我想知道我正在做的事情是否可以接受,如果可以,我该如何推理?
您必须考虑到,您添加到实例的权重会影响您的预测模型。这些案例的预测模型也将很繁重。由于奇怪的训练,您可能会过度拟合。存在过度拟合的可能性是因为用于训练模型的标准可能与用于判断模型有效性的标准不同。但是,如果您无法获得更多的训练数据,您可以冒这个风险。毕竟它适合你。