關於crossvalind函數(轉)


crossvalind是cross-valindation的縮寫,意即交叉檢驗。 常用的形式有: 

①   Indices =crossvalind('Kfold', N, K) 

②   [Train, Test] = crossvalind('HoldOut',N, P) 

③   [Train, Test] = crossvalind('LeaveMOut',N, M) 

④   [Train, Test] = crossvalind('Resubstitution',N, [P,Q])  

①indices =crossvalind('Kfold', N, K): 

該命令返回一個對於N個觀察樣本的K個fold(意為折,有“層”之類的含義,感覺還是英文意思更形象)的標記(indices)。該標記中含有相同(或者近似相同)比例的1—K的值,將樣本分為K個相斥的子集。在K-fold交叉檢驗中,K-1個fold用來訓練,剩下的一個用來測試。此過程循環K次,每次選取不同的fold作為測試集。K的缺省值為5。 使用程序: 

[m n]=size(data); %data為樣本集合。每一行為一個觀察樣本 

indices = crossvalind('Kfold',m,10); %產生10個fold,即indices里有等比例的1-10 

for i=1:10 

test=(indices==i); %邏輯判斷,每次循環選取一個fold作為測試集 train=~test; 

%取test的補集作為訓練集,即剩下的9個fold 

data_train=data(trian,:); %以上得到的數都為邏輯值,用與樣本集的選取

      label_train=label(train,:); %label為樣本類別標簽,同樣選取相應的訓練集 

data_test=data(test,:); %同理選取測試集的樣本和標簽 label_test=label(test,:); 

end 

 

②[Train, Test] = crossvalind('HoldOut',N, P): 

該命令返回一個邏輯值的標記向量,從N個觀察樣本中隨機選取(或近似於)P*N個樣本作為測試集。故P應為0-1,缺省值為0.5。 使用程序: 

groups=ismenber(label,1); %label為樣本類別標簽,生成一個邏輯矩陣groups,1用來邏輯判斷篩選 

[train, test] = crossvalind('holdOut',groups); %將groups分類,默認比例1:1,即P=0.5 

 

③[Train, Test] = crossvalind('LeaveMOut',N, M): 

該命令返回一個邏輯值的標記向量,從N個觀察樣本中隨機選取M個樣本作為測試集。M的缺省值為1。值得注意的是,LeaveMOut在循環中使用不能保證產生的是互補集合,即每次循環的隨機選取是獨立的。如果要用互補的話還是使用Kfold命令。 使用程序:

[m,n]=size(data); 

[train,test]=crossvalind('LeaveMOut',m,10) 

svmStruct = svmtrain(data(train,:),groups(train)); 

classes = svmclassify(svmStruct,data(test,:));  

cp=classperf(groups); 

cr=cp.CorrectRate  

⑤   [Train, Test] = crossvalind('Resubstitution',N, [P,Q]): 

本函數為②的一個特殊情況。當我不想把P*N剩下的部分全部作為訓練集的時候使用該函數,用Q指定一個比例,選取Q*N作為訓練集。兩個集合的選取以最小化交集為原則。

 

http://wenku.baidu.com/link?url=0CT9ku1OCeqomT-iWTaiy6nEXxyU_TGv9txwDk3uIDe80dn1D-9LCiEsV-d1PHeoYoibpROA4MysEAEtN00aXiSXlxZe7Nvq3-VZWbMdv4K

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM