K-折交叉驗證(k-fold crossValidation)以及在matlab中的實現
阿新 • • 發佈:2019-01-06
定義:
在機器學習中,將資料集A分為訓練集B(training set)和測試集C(test set),在樣本量不充足的情況下,為了充分利用資料集對演算法效果進行測試,將資料集A隨機分為k個包,每次將其中一個包作為測試集,剩下k-1個包作為訓練集進行訓練。
[M,N]=size(data);//資料集為一個M*N的矩陣,其中每一行代表一個樣本
indices=crossvalind('Kfold',data(1:M,N),10);//進行隨機分包
for k=1:10//交叉驗證k=10,10個包輪流作為測試集
test = (indices == k); //獲得test集元素在資料集中對應的單元編號
train = ~test;//train集元素的編號為非test元素的編號
train_data=data(train,:);//從資料集中劃分出train樣本的資料
train_target=target(:,train);//獲得樣本集的測試目標,在本例中是實際分類情況
test_data=data(test,:);//test樣本集
test_target=target(:,test);
[HammingLoss(1,k),RankingLoss(1,k),OneError(1,k),Coverage(1,k),Average_Precision(1 ,k),Outputs,Pre_Labels.MLKNN]=MLKNN_algorithm(train_data,train_target,test_data,test_target);//要驗證的演算法
end
//上述結果為輸出演算法MLKNN的幾個驗證指標及最後一輪驗證的輸出和結果矩陣,每個指標都是一個k元素的行向量