您正在查看9.2 -版本的RapidMiner Studio文档点击这里查看最新版本
交叉验证(并发)
剧情简介
该算子执行交叉验证来估计学习模型的统计性能。描述
它主要用于估计模型(由特定学习算子学习)在实践中的准确性。
交叉验证操作符是一个嵌套操作符。它有两个子过程:一个训练子过程和一个测试子过程。Training子过程用于训练模型。然后将训练好的模型应用到测试子过程中。在测试阶段测量模型的性能。
输入的ExampleSet被划分为k大小相等的子集。的k子集,单个子集被保留为测试数据集(即Testing子过程的输入)。剩下的K - 1子集被用作训练数据集(即训练子过程的输入)。然后重复交叉验证过程k时代,伴随着每一个k子集只使用一次作为测试数据。的k的结果k迭代被平均(或以其他方式组合)以产生单个估计。的值k可以使用折叠数参数。
对模型在独立测试集上的性能进行评估,可以很好地估计模型在未知数据集上的性能。它还显示是否发生了“过拟合”。这意味着该模型可以很好地表示测试数据,但不能很好地泛化新数据。因此,在测试数据上,性能可能会差得多。
分化
分割验证
该算子类似于交叉验证算子,但只将数据分割为一个训练集和一个测试集。因此,它类似于交叉验证的一次迭代。
分割数据
这个运算符将一个ExampleSet分割成不同的子集。它可以用于手动执行验证。
自举电路验证
此操作符类似于交叉验证操作符。与将输入ExampleSet分割成不同的子集不同,Bootstrapping Validation Operator使用Bootstrapping抽样来获得训练数据。自举抽样是带替换的抽样。
包装器分割验证
此操作符类似于分割验证操作符。它有一个附加的Attribute Weighting子流程来单独评估属性加权方法。
Wrapper-X-Validation
此操作符类似于交叉验证操作符。它有一个附加的Attribute Weighting子流程来单独评估属性加权方法。
输入
- 榜样(IOObject)
这个输入端口接收一个ExampleSet来应用交叉验证。
输出
- 模型(模型)
这个端口提供了在整个ExampleSet上训练的预测模型。请注意,只有在真正需要此模型时才应该连接此端口,否则将跳过生成。
- 性能(IOObject)
这是一个可扩展端口。您可以将任何性能向量(performance Operator的结果)连接到内部测试子流程的结果端口。Cross Validation Operator的性能输出端口提供了折叠迭代次数上的性能平均值。
- 榜样(IOObject)
该端口返回与输入相同的ExampleSet。
- 测试结果集(IOObject)
如果连接了内部测试子流程的测试集结果端口,则此端口仅发送exampleeset。如果是这样,测试集被合并到一个ExampleSet,并通过这个端口交付。例如,使用此输出端口,可以获得带有Apply Model Operator结果的标记测试集。
参数
- split_on_batch_attribute
如果启用此参数,则使用带有特殊角色“batch”的Attribute对数据进行分区,而不是随机分割数据。这使您可以控制用于在每个折叠中训练模型的确切示例。在这种情况下,所有其他分割参数都不可用。
范围: - leave_one_out
如果启用了这个参数,测试集(即Testing子流程的输入)只是来自原始ExampleSet的一个示例。剩下的示例用作训练数据。这是重复的,以便将ExampleSet中的每个示例作为测试数据使用一次。因此,它被重复“n”次,其中“n”是ExampleSet中示例的总数。交叉验证可能需要很长时间,因为训练和测试子过程的重复次数与示例的数量一样多。如果设置为true,则折叠数参数不可用。
范围: - number_of_folds
这个参数指定了ExampleSet应该被分成的折叠数(子集数)。每个子集有相同数量的示例。同样,将发生的迭代次数与折叠数.如果连接了模型输出端口,则对所有示例再重复一次Training子过程,以构建最终模型。
范围: - sampling_type
交叉验证操作符可以使用几种类型的采样来构建子集。以下选项可用:
- linear_sampling:线性抽样将ExampleSet划分为多个分区,而不改变示例的顺序。创建具有连续示例的子集。
- shuffled_sampling:洗牌采样构建ExampleSet的随机子集。随机选择示例来创建子集。
- stratified_sampling:分层抽样构建随机子集。它确保子集中的类分布(由标签Attribute定义)与整个ExampleSet中的类分布相同。例如,在二项分类的情况下,分层抽样构建随机子集,使每个子集包含标签Attribute的两个值的大致相同的比例。
- automatic:自动模式默认使用分层采样。如果它不适用,例如,如果ExampleSet不包含标称标签,则将使用洗牌抽样。
- use_local_random_seed
该参数表示a局部随机种子应该用于随机化子集的示例。的值相同局部随机种子将产生相同的子集。改变这个参数的值改变了样本随机化的方式,因此子集将有不同的样本集。仅当选择洗牌或分层抽样时有效。它不适用于线性抽样,因为它不需要随机化,样本是按顺序选择的。
范围: - local_random_seed
如果使用当地的随机种子参数被选中,此参数确定本地随机种子。如果每次使用相同的值,将创建相同的子集。
范围: - enable_parallel_execution
此参数启用内部进程的并行执行。如果遇到内存问题,请禁用并行执行。
范围:
教程的过程
为什么要验证模型
本教程说明了为什么必须在独立的数据集上验证学习模型。
“Sonar”数据集是从Samples文件夹中检索的。拆分数据操作符将其分成两个不同的子集(分别有90%和10%的示例)。决策树在更大的数据集(称为训练数据)上进行训练。
将决策树应用于训练数据和测试数据,并计算两者的性能。在此基础上,交叉验证算子用于以更复杂的方式计算Sonar数据上决策树的性能。
所有计算出的性能都被传送到进程的结果端口:
训练数据上的表现:准确率较高,达到86.63%。测试数据上的表现:准确率仅为61.90%。这表明决策树经过训练可以很好地拟合训练数据,但在测试数据上表现较差。这种效应被称为“过拟合”。交叉验证:准确率为62.12% +/- 9.81%。交叉验证不仅为我们提供了模型在未知数据上的性能的良好估计,而且还提供了该估计的标准差。上面提到的测试数据的性能在这个估计之内,而训练数据的性能在这个估计之上,并且受到“过拟合”的影响。
使用交叉验证验证模型
本教程过程展示了对样本文件夹中的“Deals”数据集使用交叉验证操作符的基本用法。
交叉验证操作符将ExampleSet划分为3个子集。采样类型参数设置为线性采样,因此子集将具有连续的示例(检查ID属性)。决策树在交叉验证算子的训练子过程中的3个子集中的2个上进行训练。
然后在Testing子流程中的剩余子集上计算决策树的性能。
此操作重复3次,以便每个子集使用一次作为测试集。
计算出的性能在三个迭代中平均,并交付给Process的结果端口。此外,在所有示例上训练的决策树被交付到结果端口。合并的测试集(交叉验证操作符的测试结果集输出端口)是流程的第三个结果。
摆弄交叉验证操作符的参数。折叠数参数控制输入ExampleSet划分的子集的数量。因此,它也是交叉验证的迭代次数。采样类型改变了创建子集的方式。
如果使用线性抽样,则子集中示例的id将是连续值。如果使用洗牌抽样,则子集中示例的id将被随机化。如果使用分层抽样,则示例的id也是随机的,但子集中的类分布将与整个“Deals”数据集中的类分布几乎相同。
通过端口将结果从训练传递到测试子过程
此过程显示了通过端口从交叉验证操作符的训练到测试子过程通过RapidMiner对象的用法。
在此过程中,在线性回归训练之前执行属性选择。属性权重被传递给测试子流程。此外,还使用了两个不同的性能运算符来计算模型的性能。它们的结果连接到Testing子流程的可扩展性能端口。
这两种性能在交叉验证的10次迭代中得到平均值,并交付给Process的结果端口。
使用batch属性拆分训练数据
这个过程显示了交叉验证操作符的批分割属性参数的使用。
泰坦尼克号训练数据集从Samples文件夹中检索,乘客类别属性设置为“batch”角色。当Cross Validation Operator的split on batch属性参数设置为true时,数据集被分割为三个子集。每个子集只有一个Passenger类的示例。
在Training子过程中,使用其中的2个子集来训练决策树。在Testing子过程中,剩下的子集用于测试决策树。
因此,决策树在两个乘客类别的所有乘客上进行训练,并在剩下的类别上进行测试。将所有三种组合的性能取平均值并交付给Process的结果端口。