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

Java中按项目名称分组执行LOOCV及Weka API自动化方案问询

Weka 没有内置直接按指定字段分组执行留一交叉验证的功能,但可以通过少量自定义代码快速实现该流程,具体方案如下:

需求本质

你需要的是分组留一交叉验证(Leave-One-Group-Out Cross Validation, LOGOCV),核心拆分规则为:以「项目名称」字段的唯一值作为分组依据,每轮验证保留1个项目对应的全部样本作为测试集,剩余所有项目的样本合并为训练集,总折数等于项目总数。

基于Weka API的实现步骤
  • 第一步:加载CSV数据集,确认「项目名称」字段的属性索引,提取该字段的所有唯一值,确认项目总数量。
  • 第二步:遍历每一个唯一的项目名称,逐行匹配拆分数据集:
    • 训练集:所有「项目名称」不等于当前遍历项目的样本
    • 测试集:所有「项目名称」等于当前遍历项目的样本
  • 第三步:拆分完成后直接调用Weka的模型训练、评估接口即可,也可以重写AbstractCrossValidation类的拆分逻辑,直接对接Weka内置的交叉验证评估框架,无需自行实现指标计算逻辑。
核心参考代码(Java)
import weka.core.Instances;
import weka.core.converters.CSVLoader;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class ProjectLevelLOOCV {
    public static void main(String[] args) throws Exception {
        // 加载CSV文件
        CSVLoader loader = new CSVLoader();
        loader.setSource(new File("your_dataset.csv"));
        Instances data = loader.getDataSet();
        
        // 替换为你数据集中项目名称字段的实际索引
        int projectAttrIndex = 0;
        // 提取所有唯一项目名
        List<String> uniqueProjects = new ArrayList<>();
        for (int i = 0; i < data.numInstances(); i++) {
            String project = data.instance(i).stringValue(projectAttrIndex);
            if (!uniqueProjects.contains(project)) {
                uniqueProjects.add(project);
            }
        }
        
        // 逐轮执行留一项目验证
        for (String testProject : uniqueProjects) {
            Instances trainSet = new Instances(data, 0);
            Instances testSet = new Instances(data, 0);
            for (int i = 0; i < data.numInstances(); i++) {
                String currentProject = data.instance(i).stringValue(projectAttrIndex);
                if (currentProject.equals(testProject)) {
                    testSet.add(data.instance(i));
                } else {
                    trainSet.add(data.instance(i));
                }
            }
            // 此处添加模型训练、预测、评估代码
        }
    }
}
注意事项
  • 确认CSV加载时「项目名称」字段被识别为字符串型或标称型属性,若被误判为数值型会导致匹配失败。
  • 数据集较大时可提前按项目名称对样本排序,拆分时直接用索引切片,无需逐行判断,提升运行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:45:04