cvpartition

类:cvpartition

为数据创建交叉验证分区

描述

c= cvpartition (n,“KFold”,k)构造一个对象ccvpartition定义一个随机的非分层分区k倍交叉验证对n观察。划分把观察结果分成k不相交的次级样本(或折叠),随机选择,但大小大致相同。的默认值k10

c= cvpartition (n,“坚持”,p)为holdout验证创建一个随机的非分层分区n观察。这种划分将观察结果分为一个训练集和一个测试(或坚持)设置参数p一定是标量。当0<p<1,cvpartition随机选择约p * n测试集的观察值p是一个整数,cvpartition随机选择p的默认值p1/10

例子

c= cvpartition (集团,“KFold”,k)为分层创建一个随机分区k倍交叉验证。集团是一个数字向量、分类数组、字符数组、字符串数组或单元数组,其中的字符向量表示每个观察值的类别。每个子样本的大小大致相同,类的比例大致相同集团

当你供应集团作为第一个输入参数cvpartition时,该函数将创建交叉验证分区,这些分区不包含与所丢失的值对应的观察行集团

例子

c= cvpartition (集团,“KFold”、钾、“分层”stratifyOption)返回一个对象c定义一个随机分区k倍交叉验证。当你供应集团作为第一个输入参数cvpartition,则该函数默认实现分层。如果你也指定“分层”,假的,然后该函数创建非分层随机分区。

您可以指定“分层”,真的仅当第一个输入参数为cvpartition集团

c= cvpartition (集团,“坚持”,p)将观察随机分为训练集和保持集(或测试集),分层使用类信息集团。训练集和测试集的类比例大致相同集团

例子

c= cvpartition (集团,“坚持”、磷、“分层”stratifyOption)返回一个对象c定义一个随机的分区到一个训练集和一个保持(或测试)集集团作为第一个输入参数cvpartition,则该函数默认实现分层。如果你也指定“分层”,假的,然后该函数创建非分层随机分区。

c = cvpartition (n, LeaveOut)创建一个随机分区,用于进行遗漏交叉验证n观察。遗漏是一种特殊的情况“KFold”折叠的次数等于观察到的次数。

c = cvpartition (n, resubstitution)创建一个对象c它没有对数据进行分区。训练集和测试集都包含所有的原始数据n观察。

例子

全部展开

使用分层的10倍交叉验证来计算误分类率。

加载Fisher的iris数据集。

负载fisheriris;y =物种;X =量;

为分层创建一个随机分区10倍交叉验证。

c = cvpartition (y,“KFold”10);

创建一个函数来计算错误分类的测试样本的数量。

有趣= @ (xTrain、yTrain xTest、欧美)(总和(~ strcmp(欧美,...分类(xTest xTrain yTrain))));

使用交叉验证返回估计的误分类率。

率= (crossval(有趣,X, y,和“分区”c)).../笔(c.TestSize)
率= 0.0200

求5重非分层分区中各阶级的比例fisheriris数据。

加载Fisher的iris数据集。

负载fisheriris;

查找数据中每个类的实例数。

[C ~ idx] =独特(物种);C%独特的类
C =3 x1单元阵列{'setosa'} {'versicolor'} {'virginica'}
n = accumarray (idx (:), 1)物种中每个类的实例数
n =3×150 50 50

这三类人的比例相等。

创建一个随机的、非分层的5层分区。

简历= cvpartition(物种,“KFold”5,“分层”假)
cv = K-fold交叉验证分区NumObservations: 150个数字集:5个训练规模:120 120 120 120 120 120 120测试规模:30 30 30 30 30

表明这三个类在数据集的每个折叠中所占的比例不相等。

我= 1:简历。NumTestSets disp ([“折”testclass =物种(cv.test(i));[C ~ idx] =独特(testClasses);C%独特的类nCount = accumarray (idx (:), 1)折叠中每个类的实例数结束
1折
C =3 x1单元阵列{'setosa'} {'versicolor'} {'virginica'}
nCount =3×18 13 9
折叠2
C =3 x1单元阵列{'setosa'} {'versicolor'} {'virginica'}
nCount =3×110 11日9
3折
C =3 x1单元阵列{'setosa'} {'versicolor'} {'virginica'}
nCount =3×110 8 12
4折
C =3 x1单元阵列{'setosa'} {'versicolor'} {'virginica'}
nCount =3×112 8 10
5折
C =3 x1单元阵列{'setosa'} {'versicolor'} {'virginica'}
nCount =3×110 10 10

因为简历是一个随机的非分层的分区fisheriris数据中,5个折叠中的每个类的比例不能保证等于其中的类的比例物种。也就是说,在每个折叠中,类的出现不像在物种。交叉验证在结果中产生随机性,因此一个fold中每个类的实例数量可能与显示的不同。

比较非分层保留集和分层保留集(高数组)中每个类的实例数。

当您对高数组执行计算时,MATLAB®使用并行池(如果您有并行计算工具箱™,则为默认值)或本地MATLAB会话。如果希望在拥有并行计算工具箱时使用本地MATLAB会话运行该示例,可以使用mapreduce函数。

创建两个类的数值向量,其中类1和类2出现在比率中1:10

1组=[(20日);2 * 1 (200 1))
组=220×11 1 1 1 1 1 1 1 1 1⋮

创建一个高数组集团

tgroup =高(集团)
使用“本地”配置文件启动并行池(parpool)…连接到平行池(工人人数:4). tgroup = 220x1高双列向量1 1 1 1 1 1 1 1::

坚持是唯一的cvpartition选项,支持高数组。金宝app创建一个随机的、无分层的holdout分区。

CV0 = cvpartition (tgroup,“坚持”1/4,“分层”假)
CV0 =保留的交叉验证分区NumObservations: [1x1高]NumTestSets: 1 TrainSize: [1x1高]TestSize: [1x1高]

返回CV0.test来记忆收集函数。

testIdx0 =收集(CV0.test);
使用并行池“局部”评估高表达:-通过1 / 1:在6.5秒内完成评估,在6.6秒内完成

找出每个类在holdout集合中出现的次数。

accumarray(集团(testIdx0), 1)保持集中每个类的实例数
ans =2×15 51

cvpartition在结果中产生随机性,因此每个类的实例数量可能与显示的不同。

因为CV0是无阶层划分吗,阶级1和类2在保持集中,不能保证以与它们相同的比率出现tgroup。然而,由于其固有的随机性cvpartition时,您有时可以获得一个holdout集,其中的类以与它们在其中的相同比例出现tgroup即使你指定“分层”,假的。类似的结果可以用训练集来说明。

返回CV0.training到内存中。

trainIdx0 =收集(CV0.training);
使用并行池“local”对tall表达式求值:-通过1 / 1:在2.5秒内完成求值,在2.5秒内完成

找出每个类在训练集中出现的次数。

accumarray(集团(trainIdx0), 1)训练集中每个类的实例数
ans =2×1149年15

非分层训练集中的类不能保证以相同的比例出现tgroup

创建一个随机的、分层的holdout分区。

CV1 = cvpartition (tgroup,“坚持”1/4)
CV1 =持有交叉验证分区NumObservations: [1x1高]NumTestSets: 1 TrainSize: [1x1高]TestSize: [1x1高]

返回CV1.test到内存中。

testIdx1 =收集(CV1.test);
使用并行池“local”评估tall表达式:-通过1 / 1:在1.1秒内完成评估,在1.1秒内完成

找出每个类在holdout集合中出现的次数。

accumarray(集团(testIdx1), 1)保持集中每个类的实例数
ans =2×14 48

在分层holdout划分的情况下,保持集中的类比和保持集中的类比tgroup都是一样的(1:10)

算法

  • 如果你提供集团作为第一个输入参数cvpartition时,该函数将创建交叉验证分区,这些分区不包含与所丢失的值对应的观察行集团

  • 当你供应集团作为第一个输入参数cvpartition,则该函数默认实现分层。您可以指定“分层”,假的创建非分层随机分区。

  • 您可以指定“分层”,真的仅当第一个输入参数为cvpartition集团

扩展功能

另请参阅

|

主题

介绍了R2008a