libsvm的"grid.py"尝试仅优化svm-train的两个参数"c"和"g".我想通过一次又一次地为不同的参数运行"grid.py"来扩展"grid.py"以优化其他参数(例如"r"或"d").我有一些问题
1.是否有任何脚本可以优化"c"和"g"以外的参数?
2.哪些参数更重要,哪些参数最大/最小.有时更改/优化一个参数会自动优化其他参数.这是svm-train参数的情况吗?
kar*_*enu 11
据我所知,没有脚本可以做到这一点,但我不明白为什么grid.py不能轻易扩展到这样做.但是,我认为这不值得付出努力.
首先,您需要选择内核.这本身就是一个参数.每个内核都有一组不同的参数,并且执行方式不同,因此为了比较内核,您必须优化每个内核的参数.
C,cost参数是一个适用于SVM本身的整体参数.其他参数都是内核函数的输入.C控制宽边距和更多训练点之间的权衡(错误分类(但是可以更好地概括为未来数据的模型)和更好地适应训练点但可能过度拟合到训练数据的狭窄边界.
通常,两个最广泛使用的内核是线性的(不需要参数)和RBF内核.
RBF内核采用gamma参数.这必须进行优化,其价值将显着影响性能.
如果您使用的是Polynomial内核,d是主要参数,您可以优化它.修改默认的其他参数是没有意义的,除非你有一些数学原因,为什么这样做会更适合你的数据.根据我的经验,多项式内核可以提供良好的结果,但是如果任何超过RBF内核的话,计算成本会很高.
与sigmoid内核类似,gamma是您的主要参数,优化它并将coef0保留为默认值,除非您很好地理解为什么这更适合您的数据.
因此,grid.py不优化其他参数的原因是因为在大多数情况下,它只是不必要的,并且通常不会导致性能的提高.至于你的第二个问题:不,这不是一个优化一个将优化另一个的情况.这些参数的最佳值特定于您的数据集.更改内核参数的值将影响C的最佳值.这就是建议进行网格搜索的原因.在搜索中添加这些额外参数将大大增加所需的时间,并且不太可能使分类器性能提高.