我也遇到了这个差异,最后我深入源代码中查找,以弄清楚文档中是否存在错别字或者其他问题。因为在高斯函数的上下文中,sigma通常作为标准差出现在分母中,对吧?以下是相关源代码。
**kernlab\R\kernels.R**
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))))
}
}
return(new("rbfkernel",.Data=rval,kpar=list(sigma=sigma)))
}
你可以从他们对
sigma/2或sigma ??
的评论中观察到,他们可能对采用的惯例有些困惑,
/2
的存在与标准偏差形式
/(2*sigma)
一致,但我不得不猜测这个发现。现在另一个证据支持在
? rbfdot
的帮助页面中阅读到的内容...
sigma 逆高斯核宽度,用于拉普拉斯、贝塞尔和ANOVA核函数
这与他们在分子中使用sigma的形式是一致的,因为在分母中它会与高斯函数的宽度成比例缩放。因此,它确实看起来像他们采用了维基百科文章中描述的伽马形式的惯例,其中他们说:
一个等价但更简单的定义涉及参数gamma = -1 /(2 * sigma ^ 2)
因此,差异似乎只是采用不同但等效的惯例的问题。采用特定惯例的一个动机(某人可以在评论中确认)可能源于代码重用和一致性的问题,因为你可以看到该参数被三种其他核形式使用,这些核可能会在分子中更传统地设置其参数。但是,我不确定这一点,因为我从未使用过这些备选核并且对每个核都不熟悉。