matlab.10折交叉驗證
阿新 • • 發佈:2020-12-27
技術標籤:matlab
clc clear all % 匯入資料 data = load('F:\work_matlab\Matlab\wdbc.txt'); [data_r, data_c] = size(data); %將資料樣本隨機分割為10部分 indices = crossvalind('Kfold', data_r, 10); for i = 1 : 10 % 獲取第i份測試資料的索引邏輯值 test = (indices == i); % 取反,獲取第i份訓練資料的索引邏輯值 train = ~test; %1份測試,9份訓練 test_data = data(test, 1 : data_c - 1); test_label = data(test, data_c); train_data = data(train, 1 : data_c - 1); train_label = data(train, data_c); % 使用資料的程式碼 end
10折交叉驗證:
load fisheriris indices = crossvalind('Kfold',species,10); %10為交叉驗證折數 cp = classperf(species); for i = 1:10 %實驗記進行10次(交叉驗證折數),求10次的平均值作為實驗結果, test = (indices == i); train = ~test; %產生測試集合訓練集索引 class = classify(meas(test,:),meas(train,:),species(train,:)); classperf(cp,class,test) end cp.ErrorRate
留一交叉驗證:
load carbig x = Displacement; y = Acceleration; % x為轎車形狀的大小,y為轎車轎車速度從0到60公里所用時間 N = length(x); % N為x長度=406 sse = 0; for i = 1:100 [train,test] = crossvalind('LeaveMOut',N,1); yhat = polyval(polyfit(x(train),y(train),2),x(test)); sse = sse + sum((yhat - y(test)).^2); end CVerr = sse / 100
自定義函式
[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