【发布时间】:2019-06-09 06:37:03
【问题描述】:
在 MNIST 数据集中,有 10 个分类输出。现在,我喜欢使用 SVM 作为分类任务的分类器。我使用 CNN 架构(不包括顶层或分类器)先从原始图像中提取特征,然后将其拟合到 SVM 分类器中。
SVM 是一个二元分类器,因此我们可以使用 One-vs-One 或 One-vs-Rest 方法来做这些事情。我使用以下来自 sci-kit learn 官方文档的实现代码。但无法意识到我指定在哪里对多类标签进行建模,或者这是 One-One 或 One-Rest 方法。
数据集形状如下:
train : (2045, 32, 32)
label : (2045, 10)
使用非顶级CNN代码提取特征后,我们得到:
train : (7636, 256) < - cnn_Xtrain
label : (7636,) < - Ytrain
我试过的SVM分类器
# SVC classifier
SVMC = SVC(probability=True)
svc_param_grid = {'kernel': ['rbf'],
'gamma': [0.0001, 0.001],
'C': [1, 10, 50]}
gsSVMC = GridSearchCV(SVMC, param_grid = svc_param_grid, cv = K_fold,
scoring="accuracy", n_jobs= -1, verbose = 1)
gsSVMC.fit(cnn_Xtrain, Ytrain) # fitting extracted features
SVMC_best = gsSVMC.best_estimator_
在这个分类器中,SVM 如何理解这是一个多类问题或一对一或一对一休息?评分结果对我来说更可疑,我确实评估了几乎98%。网格搜索( RBF )中指定的内核是否对此负责?或者我只是在这里做错了什么?
另外,使用 CNN 代码从原始图像中提取特征,然后将其拟合到 SVM 或类似分类器中是否可以?
【问题讨论】:
-
如果您的训练数据集包含两个以上的类,SVM 将自动处理多类。如果您查看流行的 Iris 分类 link,它有 3 个类别。使用混淆矩阵检查 MNIST 数据集是个好主意
标签: python machine-learning svm multiclass-classification