k-折交叉驗證(k-fold crossValidation)

k-折交叉驗證(k-fold crossValidation):
在機器學習中,將數據集A分爲訓練集(training set)B和測試集(testset)C,在樣本量不充足的情況下,爲了充分利用數據集對算法效果進行測試,將數據集A隨機分爲k個包,每次將其中一個包作爲測試集,剩下k-1個包作爲訓練集進行訓練。
在matlab中,可以利用:
indices=crossvalind('Kfold',x,k);
來實現隨機分包的操作,其中x爲一個N維列向量(N爲數據集A的元素個數,與x具體內容無關,只需要能夠表示數據集的規模),k爲要分成的包的總個數,輸出的結果indices是一個N維列向量,每個元素對應的值爲該單元所屬的包的編號(即該列向量中元素是1~k的整隨機數),利用這個向量即可通過循環控制來對數據集進行劃分。例:

[M,N]=size(data);//數據集爲一個M*N的矩陣,其中每一行代表一個樣本
indices=crossvalind('Kfold',data(1:M,N),10);//進行隨機分包
fork=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元素的行向量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章