交叉验证和网格搜索优化

lsevellsevel 成员职位:18贡献我
2018年12月编辑 帮助

你好,

我想知道我是否可以得到一些关于正确嵌套和参数设置的澄清,以便在n倍交叉验证中使用网格搜索优化。我假设优化操作符嵌套在交叉验证中,以选择本文所述的参数://www.turtlecreekpls.com/learn-right-way-validate-models-part-4-accidental-contamination/

如何使用设置参数操作符来正确设置有问题的参数,以便在执行优化后将模型应用于数据?

对这些过程的任何澄清都会有所帮助,

谢谢你!

标记:

答案

  • lsevellsevel 成员职位:18贡献我

    感谢收看本期视频。

    只是确认一下,如果交叉验证过程嵌套在一个参数优化过程中,每次交叉验证的迭代是否都会对参数进行优化?我担心的是,在优化过程中放置交叉验证将对整个数据集进行优化,而不是对每个折叠分别进行优化,从而导致训练和测试数据的污染。

  • 炉膛温度炉膛温度 成员职位:106独角兽

    RapidMiner为每个可能的参数组合(如您所定义)执行“优化参数”操作符内嵌套的所有内容。因此,如果你有一个列表,例如121个可能的参数组合,RM将运行121个k-fold交叉验证,每个参数组合一次。因此,重要的是不要一次尝试太多的组合,否则您的进程可能会运行很长时间,这取决于数据的大小和结构。

    sgenzer
  • SGolbertSGolbert RapidMiner注册分析师、会员职位:344独角兽

    你是对的,如果你用同样的数据集来优化参数,你以后会训练模型,你会有偏差。

    编辑:你实际上需要一个独立的验证数据集来正确估计模型误差。在训练集中优化参数是可以的。

    这里有一篇关于这个问题的文章:

    https://www.ncbi.nlm.nih.gov/pmc/articles/PMC1397873/

    最好的

    塞巴斯蒂安。

    sgenzer 炉膛温度
  • lsevellsevel 成员职位:18贡献我

    感谢大家的回复。

    澄清一下,为了无偏差地优化参数,优化过程必须嵌套在交叉验证中,这对吗?优化中不嵌套交叉验证?

    谢谢大家

  • SGolbertSGolbert RapidMiner注册分析师、会员职位:344独角兽

    偏差较小的估计如下:

    外CV与优化参数在训练侧

    +

    CV内部的优化参数操作符

    根据模型的不同,这可能需要很长时间。有时您可以不使用外部CV,因为模型的绝对性能很少有用(更重要的是比较不同的模型,或者使用特定于问题的度量,例如成本节约)。

    您还可以使用更少的折叠和/或使用优化参数(进化)操作符来加快过程。

    炉膛温度
  • lsevellsevel 成员职位:18贡献我

    谢谢你的澄清,SGolbert。在使用这种方法时,是否有可能将优化过程确定的模型参数直接输入到CV的测试部分?

    谢谢你!

  • SGolbertSGolbert RapidMiner注册分析师、会员职位:344独角兽

    嗨lsevel,

    我研究了一下你的问题,我注意到它在文档中没有很好地描述。简而言之,你有两种方法:

    1.在优化参数运算符中,将模型从训练器的mod端口(假设是SVM)传递到res端口。然后在Opt Par外(在外部CV内),将该报告端口交付给测试方。

    2.使用set parameters操作符。操作符帮助将对此提供足够的指导,基本上您需要一个额外的模型操作符来传递参数集。

    我个人认为第一个解决方案要简单得多,但它一开始有点违反直觉,因为文档中没有提到从优化参数的结果端口中得到什么。但经过一些测试后,我发现你可以得到最好的模型所能提供的任何结果。

    最好的

    塞巴斯蒂安。

    sgenzer
  • lsevellsevel 成员职位:18贡献我
    < ?xml version="1.0" encoding="UTF-8"?> <过程version = " 7.6.001”>
    > <上下文
    <输入/ >
    <输出/ >
    <宏/ >
    > < /上下文

    <过程扩展= " true " >



    <过程扩展= " true " >


    “参数”<列表键= >
    <参数键= " SR_LASSO。t“价值= "[0.001;2;200;线性]" / >
    < / >列表
    <过程扩展= " true " >


    <过程扩展= " true " >


    < /操作符>






    > < /过程
    <过程扩展= " true " >

    <列出关键= " application_parameters " / >
    < /操作符>














    > < /过程
    < /操作符>












    > < /过程
    < /操作符>






    > < /过程
    <过程扩展= " true " >

    <列出关键= " application_parameters " / >
    < /操作符>










    > < /过程
    < /操作符>





    > < /过程
    < /操作符>
    > < /过程

    嗨,塞巴斯蒂安,

    谢谢你的回复。我已经根据你给的指示(选项1)粘贴了代码。你能确认这是正确的组织吗?

    此外,关于无偏优化估计,我想知道每个训练集的参数优化。如果在优化参数中存在内部交叉验证,那么所选择的参数不应该基于训练数据的子集吗?因此,优化的参数将是在训练数据的一个子集上选择的,而不是在每个fold内对整个训练集进行优化?

    谢谢你!

  • lsevellsevel 成员职位:18贡献我

    (小肿块)

  • Thomas_OttThomas_Ott RapidMiner认证分析师,RapidMiner认证专家,成员职位:1761年独角兽

    你来标记可能会更好@SGolbert碰撞。:)

    sgenzer
  • SGolbertSGolbert RapidMiner注册分析师、会员职位:344独角兽

    嗨lsevel,

    这个过程似乎是正确的。关于第二部分,交叉验证操作符返回用所有数据(在这种情况下是其中一个训练折叠)训练过的模型。使用整个训练折叠选择优化的参数,更准确地说:平均所述集合的不同子集的性能(即在内部CV中)。

    最好的

    塞巴斯蒂安。

  • darkphoenix_isadarkphoenix_isa 成员职位:4贡献我
    你好,最近我使用优化参数操作符。我在优化参数中使用CV。澄清一下,基本上我们必须在CV中使用优化参数,并将其与外部CV一起包装。这是为什么当我从第一种方法应用参数结果到独立CV时,我得到不同的结果?
  • IngoRMIngoRM 管理员、版主、员工、RapidMiner认证分析师、RapidMiner认证专家、社区经理、RMResearcher、会员、大学教授职位:1751年RM创始人
    是的,这被认为是最佳实践。你也可以在这里查看关于正确验证的白皮书:
    这可能是一个原因,但另一个原因也可能仅仅是交叉验证的不同分割(取决于随机种子,为了避免这种情况,您可以为两者提供相同的本地随机种子)。可能还有更多的原因,这取决于你如何设置这个过程。
    希望这能帮到你,
    Ingo
    sgenzer topaz_n
登录注册置评。