函数crossvalind

来源:互联网 发布:淘宝详情页好做吗 编辑:程序博客网 时间:2024/05/29 16:19

搬运(帮助文档)+翻译+学习

学习神经网络时知道了“交叉验证”这个名词~然鹅,看懂了原理不会写代码(可能懒),最终,由度娘牵线发现matlab里自带了个相关度十分高的函数“crossvalind”,所以就学习记录一下,看能不能帮到自己~

作用:Generate cross-validation indices(生成交叉验证索引)

句法:

1、Indices = crossvalind('Kfold', N, K):返回针对N个样本,进行K折交叉验证随机生成的索引,Indices是1~K的整数,代表K个平均(或接近平均)的子集。K的默认值为5,在 K-fold cross-validation中,K-1个子集用于训练,剩下的一个子集用于验证,重复K次(即每个子集都循环的作为验证集)。

2、[Train, Test] = crossvalind('HoldOut', N, P):返回N个样本的逻辑索引向量,通过随机选取P*N个样本作为评测(验证)集,P∈[0,1],默认值为0.5。

3、[Train, Test] = crossvalind('LeaveMOut', N, M):(留一)当M是整数,返回N个样本的逻辑索引向量,通过随机选取M个样本作为验证集,M默认值为1,。在循环中使用'LeaveMOut'交叉验证不能保证不相关的评估集。 为了保证不相交的评估组,请改用“Kfold”。

4、[Train, Test] = crossvalind('Resubstitution', N, [P,Q]):返回N个样本的逻辑索引向量,随机选择P*N个样本作为验证集,Q*N个样本作为训练集,P && Q∈[0,1],Q=1-P,默认值都为1。

剩下三个不翻译了~感觉不常用。

[...] = crossvalind(Method, Group, ...)
[...] = crossvalind(Method, Group, ..., 'Classes', C)
[...] = crossvalind(Method, Group, ..., 'Min', MinValue)

举例:

Create a 10-fold cross-validation to compute classification error.%10折交叉验证并计算分类误差load fisheriris %下载样本数据集indices = crossvalind('Kfold',species,10);%用了第一个句法,species为种类(个数)cp = classperf(species);%这里的classperf是评估分类器性能的函数for i = 1:10    test = (indices == i); train = ~test;%开始以第一个样本集为验证集,剩余的为训练集    class = classify(meas(test,:),meas(train,:),species(train,:));%用分类器测试    classperf(cp,class,test)%计算性能endcp.ErrorRateans =    0.0200Approximate a leave-one-out prediction error estimate.load carbigx = Displacement; y = Acceleration;N = length(x);sse = 0;for i = 1:100    [train,test] = crossvalind('LeaveMOut',N,1);    yhat = polyval(polyfit(x(train),y(train),2),x(test));    sse = sse + sum((yhat - y(test)).^2);endCVerr = sse / 100CVerr =    4.9750Divide cancer data 60/40 without using the 'Benign' observations. Assume groups are the true labels of the observations.labels = {'Cancer','Benign','Control'};groups = labels(ceil(rand(100,1)*3));[train,test] = crossvalind('holdout',groups,0.6,'classes',...                           {'Control','Cancer'});sum(test) % Total groups allocated for testingans =    35sum(train) % Total groups allocated for trainingans =    26

注:这里返回的都是索引,相当于是指针,指向一个样本子集,还有,示例代码中的一些函数都是matlab自己的函数,我们只要关注框架就行。