1. 程式人生 > >K-折交叉驗證(k-fold crossValidation)以及在matlab中的實現

K-折交叉驗證(k-fold crossValidation)以及在matlab中的實現

轉載原文

定義:
在機器學習中,將資料集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元素的行向量