我通常的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
是包含每个观测值类别标签的向量。这样可以得到每个组比例适当的集合。