關於crossvalind函數

關於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作爲訓練集。兩個集合的選取以最小化交集爲原則。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章