了解 {caret} train(tuneLength = ) 和 {kernlab} 中的 SVM 方法

16
尝试更好地理解{caret}中的train(tuneLength=)如何工作。当我尝试理解来自{kernlab}的SVM方法之间的一些差异时,我感到困惑。我已经查阅了文档(此处)和{caret}培训页面(此处)。

我的玩具示例是使用iris数据集创建五个模型。结果在此处,可再现的代码在此处(它们相当冗长,所以我没有将它们复制并粘贴到帖子中)。

来自{caret}文档:

tuneLength
一个整数,表示调整参数网格的粒度。默认情况下,此参数是应由train生成的每个调整参数级别的数量。如果trainControl具有search =“random”选项,则这是将通过随机搜索生成的调整参数组合的最大数量。(注意:如果给定,必须命名此参数。)
this example中,trainControl(search = "random")train(tuneLength = 30),但似乎有67个结果,而不是30个(即调整参数组合的最大数量)?我尝试了一些操作,看看是否有30个唯一的ROC值,或者甚至ydim值,但按我的计算它们并不是。
对于玩具示例,我创建了以下表格:

caret_SVM

有没有一种方法可以看到“引擎盖下”的情况?例如,M1svmRadial)和M3svmRadialSigma)都采用相同的调整参数,并给出,但根据调用$results的结果,它们似乎使用这些参数的方式不同?

我对train(tuneLength = 9)的理解是,两个模型将分别产生具有9个值,9次sigmaC的结果,因为每个调整参数的级别数为9(例外情况是随机搜索)?类似地,M4将是9^3,因为train(tuneLength = 9)并且有3个调整参数?

迈克尔

1个回答

18

我需要进一步更新包文档,但详细信息已在随机搜索的软件包网页中说明:

"唯一组合的总数由tuneLength选项指定为train。"

然而,这对于使用RBF核的SVM来说特别模糊。以下是简述:

  • svmRadial在成本调整(cost)上进行调整,并使用基于的函数的单个值sigma。对于网格搜索,tuneLength是要测试的成本值数目,对于随机搜索,它是要评估的(成本、sigma)配对的总数。
  • svmRadialCostsvmRadial相同,但在每次重新采样循环内运行。对于随机搜索,它不会调整sigma
  • svmRadialSigma使用网格搜索同时调整成本和sigma。在一个次优认知表现的瞬间,我设置这个以尝试最多6个sigma值进行网格搜索,因为我觉得成本空间需要更广泛的范围。对于随机搜索,它与svmRadial相同。
  • svmRadialWeightsvmRadial相同,但还考虑类权重,并且仅适用于2类问题。

至于网页上的SOM示例,则存在一个错误。我在SOM参数空间中过度采样,因为需要一个过滤器xdim <= ydim & xdim*ydim < nrow(x)。错误是由于我没有保留正确数量的参数导致的。


嗨Max,非常感谢您快速而详细的回复。这非常有帮助。在类中使用APM以及ESL、PDSwR和Elder's Ensemble Methods——这是一本很棒的教材。Michael - J.M.
@topepo svmRadialWeight 函数是否通过 train 函数接受 weights 参数? - cdeterman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接