试图更好地理解train(tuneLength = )
在{caret}
中的工作原理。当试图理解{kernlab}
中SVM方法之间的一些差异时,我感到困惑。我已经查看了文档(here)和插入符号训练页面(here)。
我的小例子是使用iris
数据集创建五个模型,结果是here,可复制的代码是here(它们相当长,所以我没有复制并粘贴到帖子中)。{caret}
文档:
tuneLength
一个整数,表示调整参数网格中的粒度量。默认情况下,此参数是应该由train生成的每个调整参数的级别数。如果trainControl具有选项search =“random”,则此参数是随机搜索将生成的调整参数组合的最大数量。(注意:如果给定,则必须命名此参数。)
在this example、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
调优参数?
1条答案
按热度按时间oxcyiej71#
我需要更新更多的软件包文档,但细节在package web page for random search上拼写:
唯一组合的总数由
tuneLength
选项指定为train
。然而,对于使用RBF核的SVM来说,这一点尤其模糊。下面是一个运行:
svmRadial
根据kernlab
的sigest
函数调整cost并使用sigma
的单个值。对于网格搜索,tuneLength
是要测试的cost值的数量,对于随机搜索,它是要评估的(cost,sigma
)对的总数。svmRadialCost
与svmRadial
相同,但sigest
在每个rescue循环中运行。对于random,search,它不会在sigma
上进行优化。svmRadialSigma
与网格搜索同时调整cost和sigma
。在认知性能次优的情况下,我将其设置为在网格搜索期间最多尝试6个sigma
值,因为我觉得成本空间需要更大的范围。对于随机搜索,它与svmRadial
相同。svmRadialWeight
与svmRadial
相同,但也考虑了类权重,并且仅用于2类问题。至于网页上的SOM示例,这是一个错误。我对SOM参数空间进行了过度采样,因为需要对
xdim <= ydim & xdim*ydim < nrow(x)
进行过滤。这个错误是由于我没有保持正确的参数数量。