Я бы предложил вам использовать какой-то Grid-Search . Это метод, в котором вы оцениваете производительность двух параметров одновременно. Для вашего SVM есть sigma
и C
. Следовательно, вы выполняете исчерпывающий поиск в пространстве параметров, где каждая ось представляет параметр, а точка в нем является кортежем двух значений параметра (C_i, sigma_i)
.
Итак, чтобы выполнить это, вы просто выбираете набор для C
: {C_1,..., C_n}
и для sigma
: {sigma_1,..., sigma_n}
и обучаете, а затем проверяете его для каждой пары параметров в двух наборах (C_i, sigma_i)
.
На самом деле это займет довольно много времени, поэтому я предлагаю вам попробовать нечто подобное:
LibSVM , например, предлагает Кросс-валидация по K-Fold , поэтому выберите набор значений sigma
, определите фиксированное значение K
(может быть от 5 до 10) и выполните перекрестная проверка для получения хорошей оценки C
. Документируйте параметр C
и показатель точности. После того, как вы применили это ко всем элементам вашего набора значений sigma
, выберите пару параметров, которая достигла максимальной точности во время каждой процедуры перекрестной проверки.
Примечание:
Я предлагаю вам не использовать SVM для одноклассных задач. Даже когда для него есть формальное определение, базовому алгоритму SVM требуются два класса для определения оптимальной границы. Следовательно, я бы предложил вам создать класс catch-all
и превратить вашу проблему с одним классом в задачу с двумя классами.