Как настроить SVM для несбалансированного набора данных? - PullRequest
0 голосов
/ 13 октября 2018

Я новичок в машинном обучении и классификации.Я работаю над классификацией двух разных типов классов изображений.Я рассчитал блочные (перекрывающиеся, скользящие (1px), размер: 3x3) характеристики каждого изображения в наборе данных и сохранил их по строкам.В одном наборе данных класса (A) имеется 800 изображений, а в наборе данных - 450 изображений в классе другого типа (B).Итак, в основном у меня есть массив из 800 строк и 90000 (приблизительно) столбцов в одном классе и 450 строк и 90000 (приблизительно) столбцов в другом классе.

Теперь я хочу обучить и протестировать SVM-классификатор на этих двух классах.Я попытался выполнить 10-кратную классификацию, используя некоторые из следующих методов:

  1. Каждое альтернативное изображение из класса A и первых 400 из класса B. Точность была около 70% (низкий TP, положительный результат iрассматриваю для младшего класса B).

  2. Все изображения из класса A и все из класса B. Точность была в среднем около 80%.

  3. В третьем случае у меня повышенная дискретизация класса B с базовой мерой повторения, т.е. все изображения из класса A, все изображения из B + первые 350 изображений снова из класса B, которые повысили точность довыше 90% с высоким TP и высоким TN.

Я использую SVM следующим образом:

SVMModel = fitcsvm(trained_data,gg,'Standardize',true,'KernelFunction','RBF','BoxConstraint', 32, 'KernelScale', 0.2008);  

Хотя я получаю хорошую точность, но я не уверен в приемлемости моей методики повышения дискретизации.

Вопрос 1. Использую ли я правильный метод для повышения качества набора функций?Если нет, какой другой подходящий метод я могу использовать?какие-либо предложения.(Я уже пробовал SMOTE, но он не работает, потому что мои данные имеют очень маленькие значения. Стандартное отклонение и SMOTE выполняют операцию сложения / умножения, которая вызывает серьезные изменения в данных, переходя в какой-то другой класс типов)

Вопрос 2: Могу ли я использовать SVM без ручного повышения дискретизации в этом случае?Если да, то что я должен написать вместо того, что я уже использую?

Что ж, я решил масштабировать ядро ​​в соответствии с уровнем ошибочной классификации при перекрестной проверке (третий случай).

Пожалуйста, ведите меня.

...