2015-02-06 3 views
0

Я использую SVM Rank, который имеет несколько параметров, меняющих кого я получаю множество результатов. Есть ли какой-то механизм для настройки и получения наилучших параметров, как настроено в соответствии с лучшими результатами по набору проверки?Как настроить параметры уровня SVM?

Ниже приведены различные параметры:

Learning Options: 
    -c float -> C: trade-off between training error 
        and margin (default 0.01) 
    -p [1,2] -> L-norm to use for slack variables. Use 1 for L1-norm, 
        use 2 for squared slacks. (default 1) 
    -o [1,2] -> Rescaling method to use for loss. 
        1: slack rescaling 
        2: margin rescaling 
        (default 2) 
    -l [0..] -> Loss function to use. 
        0: zero/one loss 
        ?: see below in application specific options 
        (default 1) 
Optimization Options (see [2][5]): 
    -w [0,..,9] -> choice of structural learning algorithm (default 3): 
        0: n-slack algorithm described in [2] 
        1: n-slack algorithm with shrinking heuristic 
        2: 1-slack algorithm (primal) described in [5] 
        3: 1-slack algorithm (dual) described in [5] 
        4: 1-slack algorithm (dual) with constraint cache [5] 
        9: custom algorithm in svm_struct_learn_custom.c 
    -e float -> epsilon: allow that tolerance for termination 
        criterion (default 0.001000) 
    -k [1..] -> number of new constraints to accumulate before 
        recomputing the QP solution (default 100) 
        (-w 0 and 1 only) 
    -f [5..] -> number of constraints to cache for each example 
        (default 5) (used with -w 4) 
    -b [1..100] -> percentage of training set for which to refresh cache 
        when no epsilon violated constraint can be constructed 
        from current cache (default 100%) (used with -w 4) 
SVM-light Options for Solving QP Subproblems (see [3]): 
    -n [2..q] -> number of new variables entering the working set 
        in each svm-light iteration (default n = q). 
        Set n < q to prevent zig-zagging. 
    -m [5..] -> size of svm-light cache for kernel evaluations in MB 
        (default 40) (used only for -w 1 with kernels) 
    -h [5..] -> number of svm-light iterations a variable needs to be 
        optimal before considered for shrinking (default 100) 
    -# int  -> terminate svm-light QP subproblem optimization, if no 
        progress after this number of iterations. 
        (default 100000) 
Kernel Options: 
    -t int  -> type of kernel function: 
        0: linear (default) 
        1: polynomial (s a*b+c)^d 
        2: radial basis function exp(-gamma ||a-b||^2) 
        3: sigmoid tanh(s a*b + c) 
        4: user defined kernel from kernel.h 
    -d int  -> parameter d in polynomial kernel 
    -g float -> parameter gamma in rbf kernel 
    -s float -> parameter s in sigmoid/poly kernel 
    -r float -> parameter c in sigmoid/poly kernel 
    -u string -> parameter of user defined kernel 

ответ

2

Это известно как grid search. Я не знаю, знакомы ли вы с python и scikit-learn, но в любом случае, я думаю, their description and examples очень хорошие и языковые агностики.

В принципе, вы указываете некоторые значения, которые вас интересуют для каждого параметра (или интервал, из которого следует брать произвольные выборки, см. Рандомизированный поиск), а затем для каждой комбинации настроек используется перекрестная проверка (обычно k fold cross validation) чтобы определить, насколько хорошо модель работает с этими настройками. Возвращается наилучшая комбинация (scikit-learn может фактически вернуть ранжирование комбинаций).

Обратите внимание, что это может занять много времени. Вы должны быть уверены в некоторых параметрах самостоятельно, исходя из вашей проблемы. Например, для классификации текста вы должны просто выбрать линейное ядро, для других проблем вы, вероятно, захотите rbf и т. Д. Не просто бросайте все на поиск в сетке, выберете столько параметров, сколько сможете, используя свои знания о алгоритм и проблема.

+0

Thanks @ | V | ad. Не могли бы вы дать разъяснение «для классификации текста, вы должны просто выбрать линейное ядро»? –

+2

@BitManipulator - я имею в виду, что в литературе хорошо известно, что для классификации текста экземпляры (почти) линейно разделяются в больших размерах, возникающих из модели слова мешка. Таким образом, линейное ядро ​​работает лучше всего, нет смысла пытаться других. Не пытаться несколько ядер означает, что вам нужно будет только настроить параметры для одного, экономя много времени. – IVlad

Смежные вопросы