尝试更好地理解
train(tuneLength = )
在 {caret}
中的工作原理。当我试图理解 {kernlab}
的 SVM 方法之间的一些差异时,我感到困惑,我已经查看了文档(这里)和插入符培训页面(这里)。
我的玩具示例是使用
iris
数据集创建五个模型。结果是here,可重现的代码是here(它们相当长,所以我没有将它们复制并粘贴到帖子中)。
来自
{caret}
文档:
音调长度
一个整数,表示调整参数网格中的粒度数量。默认情况下,此参数是训练应生成的每个调整参数的级别数。如果 trainControl 具有选项 search =“random”,则这是随机搜索将生成的调整参数组合的最大数量。 (注意:如果给出,则必须命名该参数。)
在这个例子中、
trainControl(search = "random")
和train(tuneLength = 30)
,但似乎有67个结果,而不是30个(调整参数组合的最大数量)?我尝试尝试看看是否有 30 个独特的 ROC
值,甚至 ydim
值,但根据我的计数,它们不是。
对于玩具示例,我创建了下表:
有没有办法看到“幕后”发生了什么?例如,
M1
(svmRadial
) 和 M3
(svmRadialSigma
) 都采用并给出相同的调音参数,但基于调用 $results
似乎以不同方式使用它们?
我对
train(tuneLength = 9)
的理解是,这两个模型都会产生sigma
和C
的结果,每个结果都有9 values, 9 times
,因为9
是每个调整参数的级别数(随机搜索除外)?同样,M4
将会是 9^3
,因为 train(tuneLength = 9)
并且有 3
调整参数?
我需要更多更新包文档,但详细信息已拼写在包网页上以进行随机搜索:
“唯一组合的总数由
选项指定到tuneLength
。”train
然而,这是使用 RBF 内核的特别混乱的 SVM。这是一个总结:
svmRadial
调整成本并使用基于 sigma
的 kern lab
函数的单个 sigest
值。对于网格搜索,tuneLength
是要测试的成本值的数量,对于随机搜索,它是要评估的(成本,sigma
)对的总数。 svmRadialCost
与 svmRadial
相同,但 sigest
在每个重采样循环内部运行。对于随机搜索,它不会调整超过sigma
。 svmRadialSigma
网格搜索可根据成本和 sigma
进行调整。在认知表现不佳的时刻,我将其设置为在网格搜索期间最多尝试 6 个 sigma
值,因为我觉得成本空间需要更广泛的范围。对于随机搜索,它的作用与 svmRadial
相同。 svmRadialWeight
与 svmRadial
相同,但也考虑了类别权重,并且仅适用于 2 类问题。 至于网页上的 SOM 示例,这是一个错误。我对 SOM 参数空间进行了过度采样,因为需要有一个针对
xdim <= ydim & xdim*ydim < nrow(x)
的过滤器。这个错误是因为我没有保留正确数量的参数。