1. 程式人生 > >Matlab使用交叉驗證

Matlab使用交叉驗證

在做機器學習時,經常要用到交叉驗證來分配資料,故在此記錄一下。所謂交叉驗證,就是將一個數據集分為K份,然後取其中一份作為測試集,剩餘K-1份作為訓練集。然後,取另一份作為測試集,其餘K-1份作為訓練集......如此迴圈,直到每一份都做過測試集為止。用的比較多的是10折交叉驗證,程式碼如下:

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

做交叉驗證的函式就是crossvalind,第二個引數是用於做交叉驗證的資料個數,第三個引數表示要將這些資料分成幾份。另外,有興趣的同學可以開啟test變數看下,你會發現是邏輯值。

注意,此處使用的資料是用於分類的資料,類別標籤放在了最後每個樣本的最後一位。程式碼中將特徵值與標籤分離開來是為了可以對特徵值做歸一化處理,而避免將類別標籤也做歸一化。各位可以根據需要使用。資料分配好後,下面就可以添上自己的程式碼了。