【问题标题】:scikit learn svc coef0 parameter rangescikit learn svc coef0 参数范围
【发布时间】:2014-02-18 20:45:15
【问题描述】:

Documentation here

我想知道coef0 参数对于多项式和 sigmoid 内核下的 SVC 有多重要。据我了解,它是截距项,只是线性回归中的一个常数,用于将函数从零偏移。但是据我所知,SVM(scikit 使用libsvm)应该找到这个值。

什么是一个好的一般测试范围(有吗?)。例如,通常使用C,安全的选择是 10^-5 ... 10^5,以指数级递增。

但是对于coef0,该值似乎高度依赖数据,我不确定如何自动为每个数据集上的每个网格搜索选择合适的范围。有什么指点吗?

【问题讨论】:

    标签: svm scikit-learn libsvm svc


    【解决方案1】:

    首先,sigmoid 函数很少是内核。事实上,对于几乎 none 的参数值,已知会诱导有效内核(在 Mercer 的意义上)。

    其次,coef0 不是截距项,它是核投影的一个参数,可以用来克服多项式核的一个重要问题。一般来说,只使用 coef0=0 就可以了,但是多项式内核有一个问题,使用 p->inf,它越来越多地分离点对,其中<x,y> 小于 1,<a,b> 大于价值。这是因为小于 1 的值的幂越来越接近于 0,而大于 1 的相同值的幂增长到无穷大。您可以使用 coef0 来“缩放”您的数据,因此没有这种区别 - 您可以添加 1-min <x,y>,因此没有值小于 1 。如果你真的觉得需要调整这个参数,我建议在 [min(1-min , 0),max(<x,y>)] 的范围内搜索,其中 max 是通过所有训练集计算得出的。

    【讨论】:

    • 我不完全理解你的第一句话 - 你是说 sigmoid 内核这是一个无用的优化参数吗?从你评论的其余部分来看,你认为只对多项式内核使用 1 来避免值
    • 第一条语句指出,对于大多数参数而言,sigmoid 不是内核。这与调优无关,这通常是与内核机器一起使用的错误功能。引入它是为了让神经网络社区更熟悉 svm,但这不是一个好主意。对于 poly,我会说检查 coef0 值 0 和 1 是省事。因为两者都可以有一些好的属性,但我会检查其他值。
    • 我不同意 sigmoid 是错误内核选择的一般论点。一切从数据开始。如果您的数据与 sigmoid 映射得很好,那么 sigmoid 是您的选择。我有一些案例证明 sigmoid 是对我的数据进行建模的正确函数。
    • @Milad 这里没有什么不同意的,sigmoid 不是内核从数学的角度来看,这是事实,不是意见。当然,即使它们不正确,事情也会不时起作用,但这并不能使它们有效。
    • sigmoid 不符合核函数的定义是正确的。也就是说,sigmoid 不是正定函数。
    猜你喜欢
    • 2023-01-20
    • 2017-04-26
    • 2013-07-07
    • 2016-02-23
    • 2015-03-14
    • 2016-02-23
    • 2016-07-24
    • 2021-08-10
    • 2017-09-11
    相关资源
    最近更新 更多