crossvalind函数 (交叉验证函数)
生活随笔
收集整理的這篇文章主要介紹了
crossvalind函数 (交叉验证函数)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
crossvalind是cross-valindation的縮寫,意即交叉檢驗。 常用的形式有:?
①Indices =crossvalind('Kfold', N, K)?
②[Train, Test] = crossvalind('HoldOut',N, P) ③[Train, Test] = crossvalind('LeaveMOut',N, M)?
該命令返回一個對于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)?
①Indices =crossvalind('Kfold', N, K)?
②[Train, Test] = crossvalind('HoldOut',N, P) ③[Train, Test] = crossvalind('LeaveMOut',N, M)?
④[Train, Test] = crossvalind('Resubstitution',N, [P,Q]) ?
該命令返回一個對于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 ?
總結
以上是生活随笔為你收集整理的crossvalind函数 (交叉验证函数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广义回归神经网络(GRNN)的数据预测
- 下一篇: mse函数(均方误差函数)