gpt4 book ai didi

java - 如何将 svm_problem 分成 5 份以进行自定义交叉验证 - LIBSVM

转载 作者:行者123 更新时间:2023-12-01 12:17:29 32 4
gpt4 key购买 nike

我正在尝试为 LIBSVM 实现自己的交叉验证功能,但是我对如何处理基于我的输入数据提供给我的数据结构感到困惑。

数据存储在结构svm_problem中:

public class svm_problem implements java.io.Serializable
{
public int l;
public double[] y;
public svm_node[][] x;
}

地点:l是数据集的长度;y 是包含其目标值的数组;x 是一个指针数组,每个指针都指向一个训练 vector 的表示。

svm_node 定义为:

public class svm_node implements java.io.Serializable
{
public int index;
public double value;
}

我的目标是将训练数据分成5份,使用其中4份进行训练(函数svm_train),并使用剩下的一份来测试结果(svm_predict),以找到哪个C值具有最佳预测结果(基于误差函数)。

我的问题是如何根据数据结构将数据分成 5 个部分。如何才能将数据结构正确划分为5折,以便我继续进行C的优化。

我一直用这个作为指导: A Practical Guide to Support Vector Classification

如果有人可以提供一个示例或示例链接来说明如何最好地完成此操作,我们将不胜感激。谢谢。

最佳答案

svm_problem 描述了,对于 i = 0, 1, ..., l - 1f(x[i]) 对于学习的函数 f 来说,应该大约等于 y[i]。每个元组 (x[i], y[i]) 都可以被视为来自您尝试查找的函数 f 的噪声样本。

要将数据集拆分为训练、交叉验证和测试数据集,您只需将{0, 1, ..., l - 1} 集合随机拆分为这 3 个部分。这通常是通过打乱数字列表 0, 1, ..., l - 1 然后说“前 60% 的数字是训练,接下来的 20% 是交叉验证,接下来的 20% 正在测试”或类似的内容。对于数据集的每个子集,您可以构造一个新的 svm_problem 来仅描述该数据部分。

关于java - 如何将 svm_problem 分成 5 份以进行自定义交叉验证 - LIBSVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26901913/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com