В наборе данных MNIST есть 10 классификационных выходных данных. Теперь я хотел бы использовать SVM в качестве классификатора для этой задачи классификации. Я использовал архитектуру CNN (исключая верхний слой или классификатор), чтобы сначала извлечь элемент из необработанного изображения, а затем поместить его в классификатор SVM.
SVM - это двоичный классификатор, поэтому мы можем использовать One-vs-One или One-vs-Rest подход к выполнению таких задач. Я использую ниже реализованный код из Sci-Kit узнать официальный документ. Но я не мог понять, где я указываю модель для метки мультикласса, или это подход 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%. За это отвечает ядро, указанное в grid-search (RBF)? Или я просто что-то тут не так сделал?
Кроме того, можно ли извлечь эту функцию из необработанного изображения с использованием кодов CNN, а затем поместить ее в SVM или аналогичный классификатор?