主要内容

cvpartition

分区数据交叉验证

描述

cvpartition定义了一个随机的分区数据集。使用这个分区定义为训练集和测试集验证一个统计模型使用交叉验证。使用培训提取指数和培训测试提取了交叉验证的测试指标。使用重新分区定义一个新的随机分区相同类型的给定cvpartition对象。

创建

描述

c= cvpartition (n“KFold”,k)返回一个cvpartition对象c定义一个随机nonstratified分区k倍交叉验证对n观察。随机将观测对象的分区k不相交的次级样本,或折叠,每个大约相同数量的观察。

例子

c= cvpartition (n“坚持”,p)创建一个随机nonstratified分区抵抗验证n观察。这个分区将观察划分为训练集和测试,或抵抗,集。

例子

c= cvpartition (集团“KFold”,k)创建一个随机分层分区k倍交叉验证。每个子样品,或折叠,大约相同数量的观察和包含大约相同的类比例集团

当你指定集团作为第一个输入参数,cvpartition丢弃观察相应的缺失值的行集团

例子

c= cvpartition (集团“KFold”,k“分层”,stratifyOption)返回一个cvpartition对象c定义一个随机分区k倍交叉验证。如果您指定“分层”,假的,然后cvpartition忽略了类信息集团并创建一个nonstratified随机分区。否则,默认函数实现分层。

c= cvpartition (集团“坚持”,p)随机观测到的分区训练集和测试,或抵抗,与分层设置,使用类的信息集团。都有大约相同的训练集和测试集类比例集团

例子

c= cvpartition (集团“坚持”,p“分层”,stratifyOption)返回一个对象c,定义了一个随机划分为训练集和测试,或抵抗,集。如果指定“分层”,假的,然后cvpartition创建一个nonstratified随机分区。否则,默认函数实现分层。

例子

c= cvpartition (n,' Leaveout ')创建一个随机的分区分析交叉验证n观察。分析是一个特例“KFold”在折叠的数量等于观测的数量。

c = cvpartition (n,' Resubstitution ')创建一个对象c不分区的数据。训练集和测试集包含所有的原始n观察。

输入参数

全部展开

样本的观测数据,指定为一个正整数标量。

例子:One hundred.

数据类型:|

折叠的分区数量,指定为一个正整数标量。k必须小于观测的总数。

例子:5

数据类型:|

分数或数量的观察测试集用于抵抗验证、指定为一个标量范围(0,1)或一个整数标量范围在[1,n),n是观察的总数。

  • 如果p是一个标量范围(0,1),然后呢cvpartition随机选择约p *n观察测试集。

  • 如果p是一个整数的标量范围[1,n),然后cvpartition随机选择p观察测试集。

例子:0.2

例子:50

数据类型:|

分组为分层变量指定为一个数字或逻辑向量,直言,字符,字符串数组或单元阵列的特征向量表示每个观测的类。cvpartition从观察中创建一个分区集团

数据类型:||逻辑|分类|字符|字符串|细胞

指标分层,指定为真正的

  • 如果第一个输入参数cvpartition集团,然后cvpartition默认实现分层(“分层”,真的)。对于nonstratified随机分区,指定“分层”,假的

  • 如果第一个输入参数cvpartitionn,然后cvpartition总是创建一个nonstratified随机分区(“分层”,假的)。在这种情况下,您不能指定“分层”,真的

数据类型:逻辑

属性

全部展开

这个属性是只读的。

许多观测,包括观测与失踪集团值,指定为一个正整数标量。

数据类型:

这个属性是只读的。

测试集的总数分区,分区类型时指定为褶皱的数量“kfold”“leaveout”,1当分区类型“坚持”“resubstitution”

数据类型:

这个属性是只读的。

每个测试集的大小,指定为一个正整数向量当分区类型“kfold”“leaveout”,一个正整数标量当分区类型“坚持”“resubstitution”

数据类型:

这个属性是只读的。

每个训练集的大小,指定为一个正整数向量当分区类型“kfold”“leaveout”,一个正整数标量当分区类型“坚持”“resubstitution”

数据类型:

这个属性是只读的。

验证分区类型,指定为“kfold”,“坚持”,“leaveout”,或“resubstitution”

对象的功能

重新分区 重新分配数据交叉验证
测试 测试指标的交叉验证
培训 培训指标交叉验证

例子

全部折叠

使用交叉验证错误分类误差估计模型将如何执行新的数据。

加载电离层数据集。创建一个表包含预测数据X和响应变量Y

负载电离层台= array2table (X);资源描述。Y= Y;

使用一个随机nonstratified分区hpartition将数据分为训练数据(tblTrain)和保留数据集(tblNew)。储备大约30%的数据。

rng (“默认”)%的再现性n =长度(tbl.Y);hpartition = cvpartition (n,“坚持”,0.3);% Nonstratified分区idxTrain =培训(hpartition);tblTrain =(资源(idxTrain:);idxNew =测试(hpartition);tblNew =(资源(idxNew:);

训练支持向量机(金宝appSVM)分类模型使用训练数据tblTrain。计算错误分类错误和训练数据的分类精度。

Mdl = fitcsvm (tblTrain,“Y”);trainError = resubLoss (Mdl)
trainError = 0.0569
trainAccuracy = 1-trainError
trainAccuracy = 0.9431

通常,训练数据上的错误分类错误不是一个好估计的模型将执行新的数据,因为它可以在新数据低估了误分类率。更好的估计是交叉验证错误。

创建一个分区模型cvMdl。计算出10倍交叉验证错误分类错误和分类精度。默认情况下,crossval确保类的比例在每个折叠保持大约一样的类比例在响应变量tblTrain.Y

cvMdl = crossval (Mdl);%执行分层10倍交叉验证cvtrainError = kfoldLoss (cvMdl)
cvtrainError = 0.1220
cvtrainAccuracy = 1-cvtrainError
cvtrainAccuracy = 0.8780

注意,交叉验证错误cvtrainError大于resubstitution错误呢trainError

分类的新数据tblNew使用训练支持向量机模型。比较新的数据的分类精度和精度估计trainAccuracycvtrainAccuracy

newError =损失(Mdl tblNew,“Y”);newAccuracy = 1-newError
newAccuracy = 0.8700

模型的交叉验证错误可以让我们更好地估计性能比resubstitution新数据错误。

使用相同的分层分区5倍交叉验证来计算两个模型的误分类率。

加载fisheriris数据集。这个矩阵包含150种不同的花的花测量。的变量物种列出了每个花物种。

负载fisheriris

创建一个随机的分区分层5倍交叉验证。训练集和测试集有大约相同的花物种的比例物种

rng (“默认”)%的再现性c = cvpartition(物种,“KFold”5);

创建一个分区的判别分析模型和分区分类树模型通过使用c

discrCVModel = fitcdiscr(量、种类、“CVPartition”c);treeCVModel = fitctree(量、种类、“CVPartition”c);

计算两个分区模型的误分类率。

discrRate = kfoldLoss (discrCVModel)
discrRate = 0.0200
treeRate = kfoldLoss (treeCVModel)
treeRate = 0.0333

判别分析模型有一个较小的交叉验证错误分类率。

观察测试集(褶皱)类比例在5倍nonstratified分区的fisheriris数据。在折叠类比例不同。

加载fisheriris数据集。物种变量包含的物种名称(类)为每个花(观察)。转换物种到一个分类变量。

负载fisheriris物种=分类(物种);

在每个类中找到的数量的观察。注意到三个类发生在相同的比例。

C =种类(物种)%的类名
C =3 x1细胞{' setosa}{“癣”}{' virginica '}
numClasses =大小(C, 1);n = countcats(物种)%的观察每个类
n =3×150 50 50

创建一个随机nonstratified 5倍分区。

rng (“默认”)%的再现性简历= cvpartition(物种,“KFold”5,“分层”假)
简历= K-fold交叉验证分区NumObservations: 150 NumTestSets: 5 TrainSize: 120 120 120 120 120 TestSize: 30 30 30 30 30

显示三个类不发生在平等的比例在每个五测试集,或折叠。使用一个for循环更新nTestData矩阵,这样每个条目nTestData (i, j)对应于观测在测试集的数量和类C (j)。创建一个数据的柱状图nTestData

numFolds = cv.NumTestSets;nTestData = 0 (numFolds numClasses);i = 1: numFolds testClasses =物种(cv.test(我));nCounts = countcats (testClasses);%每个类的测试集的观察nTestData(我:)= nCounts ';结束酒吧(nTestData)包含(“测试集(褶皱)”)ylabel (“数量的观察”)标题(“Nonstratified分区”传奇(C)

图包含一个坐标轴对象。坐标轴对象与标题Nonstratified分区包含3条类型的对象。杂色的,这些对象代表setosa virginica。

注意,类比例不同的测试集。例如,第一个测试集包含8 setosa, 13个多色的,和9 virginica鲜花,而不是10花/物种。因为简历是一个随机nonstratified分区的fisheriris数据类比例在每个测试集(褶皱)不能保证等于类比例物种。即类并不总是发生同样在每个测试组,因为他们做的物种

创建一个nonstratified抵抗分区和分区分层抵抗高的数组。两套抵抗,比较观察每个类的数量。

当你执行计算高数组,MATLAB®使用一个平行池(默认如果你有并行计算工具箱™)或当地的MATLAB会话。要运行示例使用当地的MATLAB会话并行计算工具箱后,改变全球执行环境使用mapreduce函数。

mapreduce (0)

创建一个数字矢量的两个类,类1和类2发生在比1:10

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

创建一个高的数组集团

tgroup =高(集团)
tgroup = 220 x1高双列向量1 1 1 1 1 1 1 1::

坚持是唯一的cvpartition选项数组支持高。金宝app创建一个随机nonstratified抵抗分区。

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

返回的结果CV0.test通过使用内存收集函数。

testIdx0 =收集(CV0.test);
评估高表达式使用当地的MATLAB会话:通过1 1:在0.51秒完成评估在0.7秒完成

找到每个类发生在测试的次数,或抵抗,集。

accumarray(集团(testIdx0), 1)%的观察每个类抵抗
ans =2×15 51

cvpartition结果产生的随机性,所以你的观察每个类可以从所示不同。

因为CV0是一个nonstratified分区,类1观察和类2观察坚持集中不能保证发生在相同的比例tgroup。然而,由于固有的随机性cvpartition,你有时可以获得抵抗的一组类发生在相同的比例tgroup,即使你指定“分层”,假的。因为训练集是补的抵抗,不包括任何或失踪的观察,可以获得类似的结果为训练集。

返回的结果CV0.training到内存中。

trainIdx0 =收集(CV0.training);
评估高表达式使用当地的MATLAB会话:通过1 1:在0.24秒完成评估在0.34秒完成

找到每个类的次数发生在训练集。

accumarray(集团(trainIdx0), 1)%的观察每个类训练集
ans =2×1149年15

nonstratified训练集的类不能保证发生在相同的比例tgroup

创建一个随机分层抵抗分区。

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

返回的结果CV1.test到内存中。

testIdx1 =收集(CV1.test);
评估高表达式使用当地的MATLAB会话:通过1 1:在0.12秒完成评估在0.16秒完成

找到每个类发生在测试的次数,或抵抗,集。

accumarray(集团(testIdx1), 1)%的观察每个类抵抗
ans =2×15 51

在分层抵抗分区的情况下,坚持集和类的类比例比例tgroup都是一样的(1:10)

创建一个随机的分区的数据分析交叉验证。计算和比较训练集的意思。有明显不同的意思是重复表明存在一个有影响力的观察。

创建一个数据集X包含一个值远远大于其他人。

X = (1 2 3 4 5 6 7 8 9 20] ';

创建一个cvpartition对象10观察和重复的训练和测试数据。对于每一个重复,cvpartition选择一个观察的训练集和测试集的储备。

c = cvpartition (10,“Leaveout”)
c =分析交叉验证分区NumObservations: 10 NumTestSets: 10 TrainSize: 9 9 9 9 9 9 9 9 9 9 TestSize: 1 1 1 1 1 1 1 1 1 1

应用分析分区X,并采取培训的均值观测为每个重复利用crossval

值= crossval (@ (Xtrain Xtest)意味着(Xtrain), X,“分区”c)
值=10×16.5556 6.4444 7.0000 6.3333 6.6667 7.1111 6.8889 6.7778 6.2222 5.0000

查看训练集的分布意味着使用一盒图(或箱线图)。图显示一个局外人。

boxchart(值)

图包含一个坐标轴对象。坐标轴boxchart类型的对象包含一个对象。

找到相对应的重复异常值。重复,发现测试集的观察。

[~,repetitionIdx] = min(值)
repetitionIdx = 10
observationIdx =测试(c, repetitionIdx);influentialObservation = X (observationIdx)
influentialObservation = 20

训练集包含观察大大不同的手段的训练集的均值没有观察。这显著改变意味着表明的价值20.X是一个有影响力的观察。

提示

  • 如果您指定集团作为第一个输入参数cvpartition,那么函数丢弃观察相应的缺失值的行集团

  • 如果您指定集团作为第一个输入参数cvpartition默认情况下,那么这个函数实现分层。您可以指定“分层”,假的创建一个nonstratified随机分区。

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

扩展功能

介绍了R2008a