如何在 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 标签的向量。这将导致每个组按比例丰富的集合。
我通常的 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 标签的向量。这将导致每个组按比例丰富的集合。