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

5

Я использую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   ответа
10

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

Вы пытаетесь передать аргумент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 в кадрах данных просто удалит их.)

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

Создайте новую функцию, которая генерирует тренировочную сетку. Эта функция должна принимать два параметра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)
Пожалуйста, задайте новый вопрос, и я буду рад помочь вам theomega
Спасибо @theomega. Это очень полезно. Знаете ли вы, какова связь междуlen вcreateGrid а такжеtuneLength (аргумент в пользуtrain) является? Кроме того, почемуcreateGrid нужно получать данные для определенных моделей? ?createGrid не много говорит об этом) Amelio Vazquez-Reina
Спасибо theomega: Вот мой вопрос: / Stackoverflow.com вопросы / 14839730 / .... Мне все еще не хватает ответа, разъясняющего связь междуtuneLength и параметр len вcreateGrid, например они могут быть использованы вместе? каковы их отношения? Amelio Vazquez-Reina

Похожие вопросы