【问题标题】:train data using libsvm with best C and Gamma使用具有最佳 C 和 Gamma 的 libsvm 训练数据
【发布时间】:2013-05-12 14:53:45
【问题描述】:

您好,我正在使用 libsvm(在 VS2010 中)来训练我的数据,我使用 svm-scale.c 成功缩放了输入和输出数据,并且我的数据已准备好接受训练...

现在我有两个问题:

1)。

正如我从 LIBSVM 文档中所读到的,我意识到首先我需要训练我的缩放数据并获得一个模型。然后使用这个模型来预测最终结果,但问题是当我想训练我的系统时,我不知道我的模型参数的最佳选择是什么,特别是 (C,g) 来训练我的数据!!!。 我所做的是首先加载我的缩放数据,然后通过使用 svm_problem 我用我的火车数据填充 svm_nodes 然后调用这个函数:

struct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param);

2)。 另外我不确定 libsvm 函数的正确函数调用 -> 我的意思是我首先使用 svm_train 然后 svm_predict 来查看结果,我不知道我是否应该调用其他方法?!

模型 = svm_train(My_data,My_param); //不知道怎么填my_param

svm_node Test_Vector = svm_scale_data(x); //使用与scaled_training数据相同的算法

双倍结果 = svm_predict(Model,Test_Vector);

谢谢

【问题讨论】:

  • 我意识到使用交叉验证我可以获得最好的 c,gamma 就像 grid.py 在 python 界面中所做的那样......如果有人也知道这件事,我会很感激......

标签: visual-studio-2010 machine-learning classification libsvm


【解决方案1】:

如果您想通过 C++ 调用 LIBSVM,您可以通过让 LIBSVM 在内部进行交叉验证来优化参数。这样做时,您只需遍历要测试的参数元组 (C, gamma) 并让 LIBSVM 执行交叉验证而不是进行适当的训练。

您可以使用以下 API 函数让 LIBSVM 执行交叉验证:

void svm_cross_validation(const struct svm_problem *prob, const struct svm_parameter *param, int nr_fold, double *target);

回答您的其他问题:是的,可以拨打svm_train(),然后拨打svm_predict()

【讨论】:

  • 对不起,您能解释一下内部优化的含义吗?你的意思是我应该调用 svm_train() 并且这个函数本身会在内部优化它的参数?!!!您能否提供整个操作的伪代码(从训练到获取最佳参数以测试新样本并查看结果?)
  • 参数优化始终由用户决定。您可以使用提供的交叉验证 API 函数来测试给定参数元组的功效。您必须自己实现网格搜索方法(例如,遍历 C+gamma 的多个值并使用svm_cross_validation 测试哪个值最好)。
猜你喜欢
  • 2011-01-17
  • 2011-02-15
  • 2011-07-04
  • 2014-02-12
  • 2013-07-01
  • 2013-10-18
  • 2013-08-17
  • 2014-06-11
  • 2012-02-27
相关资源
最近更新 更多