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