caret :: train: указать параметры генерации модели

Я используюcaret библиотека в R для генерации модели. Я хочу создатьearth (иначе MARS) модель, и я хочу указатьdegreeараметр @ для этой модели поколения. По словамдокументаци (стр. 1earthетод @ поддерживает этот параметр.

Я получаю следующее сообщение об ошибке при указании параметра:

<code>> library(caret)
> data(trees)
> train(Volume~Girth+Height, data=trees, method='earth', degree=1)
Error in { : 
  task 1 failed - "formal argument "degree" matched by multiple actual arguments"
</code>

Как можно избежать этой ошибки при указанииdegree параметр?

<code>> sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_GB.UTF-8        LC_COLLATE=en_GB.UTF-8    
 [5] LC_MONETARY=en_GB.UTF-8    LC_MESSAGES=en_GB.UTF-8   
 [7] LC_PAPER=C                 LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] earth_3.2-3    plotrix_3.4    plotmo_1.3-1   leaps_2.9      caret_5.15-023
 [6] foreach_1.4.0  cluster_1.14.2 reshape_0.8.4  plyr_1.7.1     lattice_0.20-6

loaded via a namespace (and not attached):
[1] codetools_0.2-8 compiler_2.15.0 grid_2.15.0     iterators_1.0.6
[5] tools_2.15.0   
</code>

Ответы на вопрос(2)

Каретка и полезно, и несколько сводит с ума. Вот что происходит.

Вы пытаетесь передать аргументearth через... аргументtrain. Документация дляtrain содержит это описание для этого аргумента:

аргументы передаются в процедуру классификации или регрессии (например, randomForest). Ошибки будут возникать, если здесь будут переданы значения параметров настройки.

араметр @Tuning, а? Что ж, если вы прокрутите вниз и изучите официальный список параметров настройки для каждого типа модели, вы увидите, что дляearth, они естьdegree а такжеnprune.

Так что проблема в том, чтоtrain предназначен для автоматизации поиска по сетке по параметрам настройки, а... аргумент должен использоваться для передачи дальнейших аргументов в функцию подбора моделиКром для этих параметров настройки.

Если вы хотите установить параметры настройки, вам нужно использовать другие аргументы, например:

train(Volume~Girth+Height, data=trees, method='earth',
      tuneGrid = data.frame(.degree = 1,.nprune = 5))

Отметьте, как столбцы названы с начальными периодами. Кроме того, это расстраивает, так как значение по умолчанию вearth дляnprune являетсяNULL, Я не уверен, что таким способом можно передавать только значения по умолчанию. (Как правило, установка вещей наNULL в кадрах данных просто удалит их.)

 theomega17 мая 2012 г., 19:13
См. Ниже мой ответ, который дает решение моего (и вашего) вопроса.
 theomega08 мая 2012 г., 21:45
Спасибо за решение. Проблема заключается в следующем: как я могу сохранить значение nprune по умолчанию? Я посмотрел его в источнике и обнаружил, что значение по умолчанию вычисляется с использованием закрытой (не вызываемой) функцииmarsSeq так что это не фиксированное значение. Как вы сказали, вы не можете оставить это.
Решение Вопроса

Создайте новую функцию, которая генерирует тренировочную сетку. Эта функция должна принимать два параметраlen а такжеdata. Чтобы восстановить исходную тренировочную сетку, вы можете позвонитьcreateGrid метод, предоставляемыйcaret пакет. Затем вы можете изменить сетку в соответствии с вашими потребностями. Например, чтобы neavenprune параметр без изменений и добавьтеdegree от 1 до 5 используйте следующий код:

  createMARSGrid <- function(len, data) {
      g = createGrid("earth", len, data)
      g = expand.grid(.nprune=g$.nprune, .degree=seq(1,5))
      return(g)
  }   

Затем вызывайте это так:

train(formula, data=data, method='earth', tuneGrid = createMARSGrid)
 theomega12 февр. 2013 г., 22:16
Пожалуйста, задайте новый вопрос, и я буду рад помочь вам
 Amelio Vazquez-Reina12 февр. 2013 г., 19:33
Спасибо @theomega. Это очень полезно. Знаете ли вы, какова связь междуlen вcreateGrid а такжеtuneLength (аргумент в пользуtrain) является? Кроме того, почемуcreateGrid нужно получать данные для определенных моделей? ?createGrid не много говорит об этом)
 Amelio Vazquez-Reina12 февр. 2013 г., 22:18
Спасибо theomega: Вот мой вопрос: / Stackoverflow.com вопросы / 14839730 / .... Мне все еще не хватает ответа, разъясняющего связь междуtuneLength и параметр len вcreateGrid, например они могут быть использованы вместе? каковы их отношения?

Ваш ответ на вопрос