R понимает поезд {caret} (tuneLength =) и методы SVM из {kernlab}

Пытаюсь лучше понять, как train(tuneLength = ) работает в {caret}. Мое замешательство произошло, когда я пытался понять некоторые различия между методами SVM из {kernlab}. Я просмотрел документацию (здесь) и страницу обучения курсора (здесь).

В моем игрушечном примере было создано пять моделей с использованием набора данных iris. Результаты находятся здесь, а воспроизводимый код - здесь (они довольно длинные, поэтому я не копировал и не вставлял их в сообщение).

Из документации {caret}:

tuneLength
целое число, обозначающее степень детализации в сетке параметров настройки. По умолчанию этот аргумент представляет собой количество уровней для каждого параметра настройки, который должен быть сгенерирован поездом. Если в trainControl есть опция search = "random", это максимальное количество комбинаций параметров настройки, которые будут сгенерированы случайным поиском. (ПРИМЕЧАНИЕ: если указан, этот аргумент должен иметь имя.)

В этом примере trainControl(search = "random") и train(tuneLength = 30), но, похоже, 67 результатов, а не 30 ( максимальное количество комбинаций параметров настройки)? Я попытался поиграть, чтобы увидеть, может быть, было 30 уникальных ROC значений или даже ydim значений, но, по моим подсчетам, это не так.

Для примера с игрушкой я создал следующую таблицу:

caret_SVM

Есть ли способ увидеть, что происходит «под капотом»? Например, M1 (svmRadial) и M3 (svmRadialSigma) оба принимают и получают одни и те же параметры настройки, но на основании вызова $results кажется, что они используют их по-разному?

Насколько я понимаю, train(tuneLength = 9) состоял в том, что обе модели будут давать результаты sigma и C, каждая с 9 values, 9 times, поскольку 9 - это количество уровней для каждого параметра настройки (исключение составляет случайный поиск)? Точно так же M4 будет 9^3 с train(tuneLength = 9) и есть 3 параметры настройки?

Майкл


person J.M.    schedule 09.08.2016    source источник


Ответы (1)


Мне нужно больше обновить документацию по пакету, но подробности указаны на веб-странице пакета для случайного поиска:

"Общее количество уникальных комбинаций определяется параметром tuneLength для train."

Однако это особенно грязные SVM, использующие ядро ​​RBF. Вот сбег:

  • svmRadial настраивает стоимость и использует одно значение sigma на основе функции sigest kern lab. Для поиска по сетке tuneLength - это количество значений стоимости для тестирования, а для случайного поиска - это общее количество пар (стоимость, sigma) для оценки.
  • svmRadialCost совпадает с svmRadial, но sigest выполняется внутри каждого цикла повторной выборки. На случайный поиск, больше sigma не настраивается.
  • svmRadialSigma с поиском по сетке настраивается как по стоимости, так и по sigma. В момент неоптимальной когнитивной деятельности я установил это, чтобы попробовать не более 6 значений sigma во время поиска по сетке, так как я чувствовал, что пространство затрат требует более широкого диапазона. Для случайного поиска выполняет то же самое, что и svmRadial.
  • svmRadialWeight то же самое, что и svmRadial, но также учитывает веса классов и предназначен только для задач с двумя классами.

Что касается примера SOM на веб-странице, это ошибка. Я передискретизирую пространство параметров SOM, так как должен быть фильтр для xdim <= ydim & xdim*ydim < nrow(x). Ошибка из-за того, что я не сохраняю нужное количество параметров.

person topepo    schedule 10.08.2016
comment
Привет, Макс, большое спасибо за быстрый и подробный ответ. Это очень полезно. Использование APM в классе вместе с методами ESL, PDSwR и Elder's Ensemble - это отличный текст. Майкл - person J.M.; 11.08.2016
comment
@topepo svmRadialWeight принимает аргумент weights через train? - person cdeterman; 08.11.2017