我也遇到了这种差异,我最终深入研究了源代码,以确定文档中是否存在拼写错误,或者由于高斯上下文中的 sigma 传统上作为分母中的标准差而发生了什么,对吧?
这是相关来源
**kernlab\R\kernels.R**
## Define the kernel objects,
## functions with an additional slot for the kernel parameter list.
## kernel functions take two vector arguments and return a scalar (dot product)
rbfdot<- function(sigma=1)
{
rval <- function(x,y=NULL)
{
if(!is(x,"vector")) stop("x must be a vector")
if(!is(y,"vector")&&!is.null(y)) stop("y must a vector")
if (is(x,"vector") && is.null(y)){
return(1)
}
if (is(x,"vector") && is(y,"vector")){
if (!length(x)==length(y))
stop("number of dimension must be the same on both data points")
return(exp(sigma*(2*crossprod(x,y) - crossprod(x) - crossprod(y))))
# sigma/2 or sigma ??
}
}
return(new("rbfkernel",.Data=rval,kpar=list(sigma=sigma)))
}
您可以从他们的评论中观察到sigma/2 or sigma ??
,他们可能对采用的约定有点困惑,存在/2
将与标准偏差形式一致/(2*sigma)
,但我不得不推测这一发现。
现在,另一个确凿的证据在帮助页面中,? rbfdot
其中显示...
sigma 高斯、拉普拉斯、贝塞尔和方差分析核使用的逆核宽度
这与他们在分子中使用 sigma 的形式是一致的,因为在分母中,它将与高斯右的宽度成比例地缩放。所以看起来他们确实采用了维基百科文章中描述为伽马形式的约定,他们说
等效但更简单的定义涉及参数 gamma = -1/(2*sigma^2)
因此,差异似乎只是采用不同但等效的约定。特定约定的一个动机(有人可能会在评论中确认)可能来自代码重用和一致性问题,正如您所见,该参数被其他三种内核形式使用,它们的参数可能更传统地设置在分子中。但是,我不确定这一点,因为我从未使用过那些备用内核并且对每个内核都不熟悉。