我是机器学习和分类的新手。我正在为两种不同类型的图像类别进行分类。我已经计算出数据集中每个图像的逐块(重叠,滑动(1px),大小:3x3)特征,并将它们逐行存储。数据集中的一种类型(A)类别中有800张图像,另一种类型(B)类别中有450张图像。因此,基本上我在一个类中有800行和90000(约)列的数组,而在另一类中有450行和90000(约)列的数组。
现在,我想在这两个类上训练和测试SVM分类器。我尝试使用以下某些方法执行10折分类:
A类的每个替代图像和B类的前400个图像。精度约为70%(低TP,我正在考虑对B类较小的图像表示肯定)。
所有来自A类和所有B类的图像。准确度约为80%。
在第三种情况下,我使用基本重复测量对B类进行了上采样,即A类的所有图像,B类的所有图像+ B类的前350个图像,在高TP的情况下将精度提高到90%以上和高TN。
我正在按以下方式使用SVM:
SVMModel = fitcsvm(trained_data,gg,'Standardize',true,'KernelFunction','RBF','BoxConstraint', 32, 'KernelScale', 0.2008);
尽管我获得了不错的准确性,但是我不确定我的上采样方法是否可以接受。
问题1:我是否使用正确的方法对功能集进行了升采样?如果没有,我可以使用其他合适的方法吗?有什么建议么。 (我已经尝试过SMOTE,但由于我的数据值太小而无法使用。标准偏差和SMOTE执行加/乘运算,这会导致数据发生重大变化,并转移到其他类型的类上)
问题2:在这种情况下,是否可以在不进行手动上采样的情况下使用SVM?如果是,那我应该写些什么代替我已经在用的东西?
嗯,我已经根据交叉验证的错误分类率(第三种情况)决定了内核规模。
请指导我。