计算 LIBSVM 的 C 和 Gama
Posted
技术标签:
【中文标题】计算 LIBSVM 的 C 和 Gama【英文标题】:Calculating C and Gama for LIBSVM 【发布时间】:2014-12-08 02:39:44 【问题描述】:我正在为 libsvm 计算 C 和 gama 的值。我的训练数据大小是 Mat(28539,96);但是这个搜索需要很长时间。我的笔记本电脑从前两天开始一直处于开机状态,并且仍在搜索中。如何解决这个问题,任何人都有任何想法。帮助将不胜感激
【问题讨论】:
我正在使用的课程数量是七个...... 假设您进行网格搜索:减小值范围的大小,和/或增加步长。 a-Jays......你怎么能说需要2天?你知道我们如何计算时间吗?或者你根据你的个人经验告诉这个。 【参考方案1】:如果你使用的是 grid.py - 你可以在里面找到参数
telnet_workers = []
ssh_workers = []
nr_local_worker = 1
您可以在其中配置外部帮助程序和本地线程的数量。尝试增加本地线程的数量,直到您的机器(接近)100% 加载。
【讨论】:
【参考方案2】:网格搜索可能是一个很长的过程,尤其是在有大量数据的情况下。
你可以做的是:
-
记录训练一个模型需要多少时间
计算网格搜索将训练多少个模型
大致估计执行网格搜索需要多长时间。
例如,如果您想每次以 2 的更高幂检查 C 从 2^0 到 2^15,您将对 C 值执行 16 次训练。如果您想尝试 1 到 5 之间的 gamma,您将为每个 gamma 执行 5 次训练。
网格搜索总共会进行 16*5 的训练。如果训练一个模型需要 10 秒,那么您将需要等待 800 秒才能完成整个网格搜索。
请注意,随着 C 变大,计算需要更多时间,因此您可以使用最大的 C 值来估计训练一个模型的时间。
一种推荐的方法是使用全范围开始,然后减小范围和步长,以保持每次网格搜索的合理训练次数。
例子:
在 C = 2^0 和 2^15 以及 gamma = 1 和 5 之间搜索 --> 280 次迭代 请注意,最低误差值在 C = 2^4 abd C = 2^5 和 gamma = 3 和 4 范围内 在 C = 2^3 和 2^6 以及 gamma = 3 和 4 之间搜索(使用 0.1 步)--> 40 次迭代等你对结果满意后。
【讨论】:
感谢alexadrekow的精彩解释......我现在正在根据这个细节进行实验。 好的,如果您对它感到满意,请不要忘记接受答案。 ;) 好答案!一个后续问题:为什么建议使用网格搜索?不应该使用专用的非线性优化算法,例如Nelder–Mead,用更少的评价给出相同的答案? @A.Donda 几个原因:1)网格搜索找到好的参数所需的计算时间并不比高级方法多多少,因为只有两个参数。 2)网格搜索可以并行化,因为每对参数都是独立的,这不一定是更高级的方法的情况,这些方法通常是迭代过程。 3) 使用近似或启发式而不是详尽搜索的方法可能会让您感到不安全以上是关于计算 LIBSVM 的 C 和 Gama的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 matlab 中使用带有 libsvm 的预计算内核