使用数据增强增加些数据样本,相比删掉某一类相比另外一个类别多的部分,准确率会高一些,拿做的脑电举例,准确率能从 50 提高到 60,但是再去验证泛化能力(找一些新的数据进行测试)的时候,准确率还是回到了 50。。。。。。所以怎么说好呢,最终还是要看数据本身是不是可分吧
需要安装 MATLAB 官方的函数包,从而使用 mysmote 函数
这里有两类数据,x1csp 和 x2csp,x1 比 x2 少了一些,使用 smote 增加到两者数目相等,函数的输入 dataset 必须是 table,另外 table 的最后一列必须是 label 为表头的标签类列
%% smote
for ch=1:16
dataset = array2table(transpose([squeeze(x1csp(1,:,:)),squeeze(x2csp(1,:,:))]));
label0 = repmat("class0",size(x1csp,3),1);
label1 = repmat("class1",size(x2csp,3),1);
dataset = addvars(dataset, [label0;label1],...
'NewVariableNames','label');
[tmp,visdata] = mySMOTE(dataset,'class0',size(x2csp,3)-size(x1csp,3),"NumNeighbors",10, "Standardize", true);
newdata(ch,:,:) = transpose(tmp{:,1:7200});
end
x1csp = cat(3,x1csp,newdata);