我通常的K折叠交叉验证的实现非常像:
K = 10;
CrossValIndices = crossvalind('Kfold', size(B,2), K);
for i = 1: K
display(['Cross validation, folds ' num2str(i)])
IndicesI = CrossValIndices==i;
TempInd = CrossValIndices;
TempInd(IndicesI) = [];
xTraining = B(:, CrossValIndices~=i);
tTrain = T_new1(:, CrossValIndices~=i);
xTest = B(:, CrossValIndices ==i);
tTest = T_new1(:, CrossValIndices ==i);
end
但要确保训练、测试和验证数据集具有相似比例的类(例如,20 个类(。我想使用分层采样 技术。基本目的是避免阶级失衡问题。我知道 SMOTE 技术,但我想应用这个。
您可以简单地使用crossvalind('Kfold', Group, K)
,其中Group
是包含每个观测值的类标签的向量。这将导致每个组按比例丰富的集合。