交叉验证和网格搜索优化
你好,
我想知道我是否可以得到一些关于正确嵌套和参数设置的澄清,以便在n倍交叉验证中使用网格搜索优化。我假设优化操作符嵌套在交叉验证中,以选择本文所述的参数://www.turtlecreekpls.com/learn-right-way-validate-models-part-4-accidental-contamination/
如何使用设置参数操作符来正确设置有问题的参数,以便在执行优化后将模型应用于数据?
对这些过程的任何澄清都会有所帮助,
谢谢你!
标记:
0
答案
RapidMiner制作了一系列非常棒的教程视频。这个应该能回答你的问题:16模型参数的优化
感谢收看本期视频。
只是确认一下,如果交叉验证过程嵌套在一个参数优化过程中,每次交叉验证的迭代是否都会对参数进行优化?我担心的是,在优化过程中放置交叉验证将对整个数据集进行优化,而不是对每个折叠分别进行优化,从而导致训练和测试数据的污染。
RapidMiner为每个可能的参数组合(如您所定义)执行“优化参数”操作符内嵌套的所有内容。因此,如果你有一个列表,例如121个可能的参数组合,RM将运行121个k-fold交叉验证,每个参数组合一次。因此,重要的是不要一次尝试太多的组合,否则您的进程可能会运行很长时间,这取决于数据的大小和结构。
你是对的,如果你用同样的数据集来优化参数,你以后会训练模型,你会有偏差。
编辑:你实际上需要一个独立的验证数据集来正确估计模型误差。在训练集中优化参数是可以的。
这里有一篇关于这个问题的文章:
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC1397873/
最好的
塞巴斯蒂安。
感谢大家的回复。
澄清一下,为了无偏差地优化参数,优化过程必须嵌套在交叉验证中,这对吗?优化中不嵌套交叉验证?
谢谢大家
偏差较小的估计如下:
外CV与优化参数在训练侧
+
CV内部的优化参数操作符
根据模型的不同,这可能需要很长时间。有时您可以不使用外部CV,因为模型的绝对性能很少有用(更重要的是比较不同的模型,或者使用特定于问题的度量,例如成本节约)。
您还可以使用更少的折叠和/或使用优化参数(进化)操作符来加快过程。
谢谢你的澄清,SGolbert。在使用这种方法时,是否有可能将优化过程确定的模型参数直接输入到CV的测试部分?
谢谢你!
嗨lsevel,
我研究了一下你的问题,我注意到它在文档中没有很好地描述。简而言之,你有两种方法:
1.在优化参数运算符中,将模型从训练器的mod端口(假设是SVM)传递到res端口。然后在Opt Par外(在外部CV内),将该报告端口交付给测试方。
2.使用set parameters操作符。操作符帮助将对此提供足够的指导,基本上您需要一个额外的模型操作符来传递参数集。
我个人认为第一个解决方案要简单得多,但它一开始有点违反直觉,因为文档中没有提到从优化参数的结果端口中得到什么。但经过一些测试后,我发现你可以得到最好的模型所能提供的任何结果。
最好的
塞巴斯蒂安。
嗨,塞巴斯蒂安,
谢谢你的回复。我已经根据你给的指示(选项1)粘贴了代码。你能确认这是正确的组织吗?
此外,关于无偏优化估计,我想知道每个训练集的参数优化。如果在优化参数中存在内部交叉验证,那么所选择的参数不应该基于训练数据的子集吗?因此,优化的参数将是在训练数据的一个子集上选择的,而不是在每个fold内对整个训练集进行优化?
谢谢你!
(小肿块)
你来标记可能会更好@SGolbert碰撞。
嗨lsevel,
这个过程似乎是正确的。关于第二部分,交叉验证操作符返回用所有数据(在这种情况下是其中一个训练折叠)训练过的模型。使用整个训练折叠选择优化的参数,更准确地说:平均所述集合的不同子集的性能(即在内部CV中)。
最好的
塞巴斯蒂安。
Ingo