首页 文章

理解{caret}训练(tuneLength =)和来自{kernlab}的SVM方法

提问于
浏览
11

试图更好地理解 train(tuneLength = ){caret} 中的工作原理 . 当我试图理解来自 {kernlab} 的SVM方法之间的一些差异时,我发生了混乱 . 我已经阅读了文档(here)和插入符号培训页面(here) .

我的玩具示例是使用 iris 数据集创建五个模型 . 结果是here,可重现的代码是here(他们're rather long so I didn't将它们复制并粘贴到帖子中) .

来自 {caret} 文件:

tuneLength一个整数,表示调整参数网格中的粒度量 . 默认情况下,此参数是列车应生成的每个调整参数的级别数 . 如果trainControl具有选项search =“random”,则这是随机搜索将生成的调整参数组合的最大数量 . (注意:如果给出,则必须命名此参数 . )

this exampletrainControl(search = "random")train(tuneLength = 30) 中,但似乎有67个结果,而不是30个(调整参数组合的最大数量)?我试着玩,看看是否有30个独特的 ROC 值,甚至是 ydim 值,但据我的统计,它们不是 .

对于玩具示例,我创建了下表:

有没有办法看到"under the hood"上发生了什么?例如, M1svmRadial )和 M3svmRadialSigma )都接受并给出了相同的曲调参数,但基于调用 $results 似乎使用不同的方式?

我对 train(tuneLength = 9) 的理解是,两个模型都会产生 sigmaC 的结果,每个都带有 9 values, 9 times ,因为 9 是每个调整参数的级别数(例外是随机搜索)?同样,自 train(tuneLength = 9) 以来 M4 将是 9^3 并且有 3 调整参数?

迈克尔

1 回答

  • 11

    我需要更新包文档,但详细信息请在package web page for random search上拼写:

    “唯一组合的总数由tuneLength选项指定以进行训练 . ”

    但是,这是使用RBF内核的特别混乱的SVM . 这是一个故障:

    • svmRadial 调整成本并根据 kern labsigest 函数使用 sigma 的单个值 . 对于网格搜索, tuneLength 是要测试的成本值的数量,对于随机搜索,它是要评估的(成本, sigma )对的总数 .

    • svmRadialCostsvmRadial 相同,但 sigest 在每个重采样循环内运行 . 对于随机搜索,它不会调整 sigma .

    • svmRadialSigma 使用网格搜索调整成本和 sigma . 在次优认知表现的时刻,我将其设置为在网格搜索期间尝试最多6个 sigma 值,因为我觉得成本空间需要更广泛的范围 . 对于随机搜索,它与 svmRadial 相同 .

    • svmRadialWeightsvmRadial 相同,但也考虑了类权重,仅适用于2类问题 .

    至于网页上的SOM示例,这是一个错误 . 我对SOM参数空间进行了过度采样,因为需要为 xdim <= ydim & xdim*ydim < nrow(x) 设置过滤器 . 这个错误来自于我没有保留适量的参数 .

相关问题