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

时间:2017-07-21 02:44:59

标签: matlab machine-learning cross-validation sampling

我通常的K-fold交叉验证的实现非常类似于:

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技术,但我想应用这个。

1 个答案:

答案 0 :(得分:1)

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