You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中WEKA 3.8.5过采样欠采样过滤器的使用问题

Java调用WEKA3.8.5过滤器实现对照实验方案

实现逻辑说明

  • 将交叉验证评估逻辑封装为独立方法,三组测试仅变更输入数据集,保证变量唯一,方便多次运行对比
  • 有监督类过滤器执行前需确保数据集已设置类别索引,否则会抛出格式错误
  • 参数配置完全对应要求取值,适配WEKA3.8.5版本的参数规则

过滤器配置规则

  • 测试2(欠采样):SpreadSubsample参数设置为-M 1.0,实现正负样本比例1:1欠采样
  • 测试3(过采样):Resample参数设置为-B 1.0 -Z 130.3,实现偏向少数类的过采样

完整可运行代码

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Random;
import weka.classifiers.Evaluation;
import weka.classifiers.trees.J48;
import weka.core.Instances;
import weka.filters.Filter;
import weka.filters.supervised.instance.Resample;
import weka.filters.supervised.instance.SpreadSubsample;

public class Fraud {
    // 抽取公共评估方法,传入数据集和测试名称直接输出结果
    public static void evaluateModel(Instances dataset, String testName) throws Exception {
        J48 j48Classifier = new J48();
        Evaluation evaluation = new Evaluation(dataset);
        // 固定随机种子为1保证实验可复现
        evaluation.crossValidateModel(j48Classifier, dataset, 10, new Random(1));
        System.out.println("\n==========" + testName + "结果==========");
        System.out.println(evaluation.toSummaryString("", false));
    }

    public static void main(String args[]) {
        try {
            // 仅加载一次原始数据集,复用给三组测试
            String fraudDatasetPath = "C:\\Users\\Owner\\Desktop\\CreditCard\\CreditCard.arff";
            BufferedReader bufferedReader = new BufferedReader(new FileReader(fraudDatasetPath));
            Instances originalDataset = new Instances(bufferedReader);
            originalDataset.setClassIndex(originalDataset.numAttributes() - 1);

            // 测试1:无过滤器基准测试
            evaluateModel(originalDataset, "无过滤器基准测试");

            // 测试2:SpreadSubsample欠采样
            SpreadSubsample spreadSubsample = new SpreadSubsample();
            spreadSubsample.setOptions(new String[]{"-M", "1.0"});
            spreadSubsample.setInputFormat(originalDataset);
            Instances underSampledDataset = Filter.useFilter(originalDataset, spreadSubsample);
            evaluateModel(underSampledDataset, "SpreadSubsample欠采样测试");

            // 测试3:Resample过采样
            Resample resample = new Resample();
            resample.setOptions(new String[]{"-B", "1.0", "-Z", "130.3"});
            resample.setInputFormat(originalDataset);
            Instances overSampledDataset = Filter.useFilter(originalDataset, resample);
            evaluateModel(overSampledDataset, "Resample过采样测试");

            System.out.println("\n所有测试执行完成");
        } catch (Exception e) {
            System.out.println("执行出错:\n" + e.getMessage());
            e.printStackTrace();
        }
    }
}

运行说明

代码运行后会依次输出三组测试的评估结果,可直接对比Kappa统计量、分类正确率等指标选择最优方案。如果需要调整参数,直接修改对应过滤器的setOptions入参数组即可。

内容的提问来源于stack exchange,提问作者Jr.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:36:02