如何在 MATLAB 中对分类进行分层 10 折交叉验证?

How to perform stratified 10 fold cross validation for classification in MATLAB?

我通常的 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

但为了确保训练、测试和验证数据集具有相似的 classes 比例(例如,20 classes)。我想使用分层抽样 technique.Basic 目的是避免 class 失衡 problem.I 了解 SMOTE 技术,但我想应用此技术。

您可以简单地使用 crossvalind('Kfold', Group, K),其中 Group 是包含每个观察值的 class 标签的向量。这将导致每个组按比例丰富的集合。