R / Caret: обучающие и тестовые наборы против перекрестной проверки?

9

Это может быть, возможно, глупый вопрос, но при создании модели с каретой и использовании чего-то вроде LOOCVили (даже более точно) LGOCV, какая польза от разделения данных на наборы обучающих и тестовых наборов, если это, по сути, шаг перекрестной проверки в любом случае?

Я прочитал некоторые из связанных вопросов, и они предположили, что некоторые из методов перекрестной проверки (например, то, что описано здесь на сайте каретки ) предназначены для выбора функций . Но в моем случае я использую randomForest( method = "rf") и kernlab( method = svmRadial), которые не перечислены в группе, которая пытается очистить предикторы.

Итак, мой вопрос: если я использую что-то вроде этого cross_val <- trainControl(method = "LGOCV", p = 0.8), разве это не то же самое, что тренироваться на 80% моих данных, тестировать результирующую модель на оставшихся 20% и делать это снова и снова, чтобы понять, насколько хорошо модель работает?

Если да, то нужно ли разбивать мои данные на наборы поездов / тестов?

PS Я частично спрашиваю, поскольку я работаю над моделями на опытно сгенерированных прототипах DOE (подумайте о сложных вещах, где мы настраиваем входные данные, а затем используем методы тестирования для измерения различных атрибутов прототипа).

Поэтому у меня нет огромного набора данных с множеством перекрывающихся уровней предикторов для моделирования - мы часто проводим одно испытание в каждой точке интереса DOE, так как в этом случае генерация данных обходится дорого. Таким образом, я хотел бы использовать все данные, которые я могу для точной модели, но хотел проверить здесь, что я не упускаю что-то очевидное и создаю плохую модель, не разбивая вещи.


Изменить: В ответ на вопрос @ topepo, я моделирую физически измеренные атрибуты соединения на основе корректировки химических входов формулы. Я не могу обсуждать свое реальное применение, но я приведу пример, основанный на формулировке внутренней латексной краски. Я провожу спроектированные эксперименты, в которых мы смешиваем 4-5 химикатов, возможно, играем с% сухого остатка, и некоторое время, чтобы нагреть раствор полимера, чтобы отрегулировать степень полимеризации.

Затем мы можем измерить реологию, молекулярную массу, твердость лакокрасочного покрытия, водостойкость и т. Д.

У нас есть приличные реплики нескольких переменных, но мало истинных копий в том смысле, что каждый уровень DOE был точно таким же. Общий набор данных составляет ~ 80 наблюдений и, возможно, 4-5 точных повторов. Мы провели 15 различных тестов, и, возможно, 5-6 из них были проведены для каждого наблюдения. Некоторые ответы присутствуют для 25-50% данных.

Здесь мы хотели бы смоделировать влияние наших 7 предикторов на выходные свойства, а затем оптимизировать их для новых областей проектирования, которые, скорее всего, дадут желаемые свойства.

(Отсюда мой вопрос ЗДЕСЬ . Как только у меня будет обученная модель, было бы неплохо сделать «реверс» и ввести желаемые ответы, чтобы получить наилучшее предположение о возможных входных уровнях, чтобы попробовать следующий).

Хенди
источник
Набор для проверки и набор для тестирования - это две разные вещи! См. Stats.stackexchange.com/questions/19048/… и en.wikipedia.org/wiki/Test_set
sashkello
@sashkello Спасибо за это. Это, вероятно, может быть закрыто как дубликат, и почему-то я полностью пропустил этот вопрос. Один пропущенный бит может быть следующим: если я тренируюсь с тем data_set1, что я считаю шагом, выполненным LGOCVперекрестной проверкой? Из моего прочтения я предполагаю, что 1) caretвыполняет итерацию параметров настройки, data_set1а затем 2) сохраняет эти параметры фиксированными и 3) создает «подмодель», используя параметры из # 1 для каждой p = 0.8выборки, data_set1и проверяет прогнозы на оставшихся 0,2, чтобы оценить точность , Это разумное резюме?
Хенди
Еще один упущенный момент: не помогает ли набор тестов для точности модели? Похоже, это просто дает объективный набор для будущих испытаний. Если данные ограничены и не слишком много перекрывающихся точек проектирования, не лучше ли мне тренироваться с полным набором и полагаться на перекрестную проверку для оценки точности?
Хенди
С улучшенной стратегией поиска, это еще одна полезная стратегия: stats.stackexchange.com/questions/9357/… . В частности, это «я думаю, что одним из ограничивающих факторов здесь является количество данных, которое у вас есть. В большинстве случаев мы даже не хотим разбивать данные на фиксированные разделы вообще, следовательно, CV». Я думаю, что это относится к моему вопросу (который, вероятно, относится к ограниченному характеру моих данных (всего 80 наблюдений). Похоже, голосование за не расщепление в этих случаях?
Хенди

Ответы:

7

Мои общие мысли:

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

Тем не менее, существует вероятность переопределения, и на шансы на это большое влияние оказывает количество данных (и предикторов). Если у вас есть немного данных, есть несколько способов подумать об этом:

  • Используйте все данные для обучения, поскольку каждая точка данных значительно увеличивает эффективность модели.
  • Отложите небольшой тестовый набор в качестве окончательной проверки для грубых ошибок из-за переоснащения. Шансы на переоснащение с небольшим размером образцов не малы и увеличиваются с увеличением количества образцов.

Я попадаю во второй лагерь, но первый вовсе не ошибается.

Если у вас есть тонна данных, то это не имеет большого значения (если вы не имеете небольшую частоту событий).

Для вас:

У вас есть DOE. Тип дизайна поможет ответить на вопрос. Вы пытаетесь интерполировать между проектными точками или прогнозировать проектные точки, которые еще не были протестированы?

У вас есть одна копия. Я упал, как случайный лес, ударяя гвоздём кувалдой, и это может привести к перегонке. Я бы попробовал что-то более гладкое, например, SVM или (вздох) нейронную сеть.

Максимум

topepo
источник
Я добавил обновление для вас выше. У меня были довольно хорошие кривые (я думаю, это субъективно) с method = "svmRadial". Я надеюсь оценить некоторые другие, в том числе method = neuralnet, хотя в прошлых попытках я обнаружил, что нейронная сеть очень чувствительна к `set.seed (). Короче говоря, мы пытаемся: 1) лучше понять взаимосвязь между входами / множественными ответами и 2) сделать лучшие предположения в наиболее вероятной области проектирования, чтобы получить желаемые свойства, чтобы мы могли запустить новые, более сфокусированные DOE против более типичных экспансивный / дробовик подход с точки зрения входных мин / макс уровней, чтобы попробовать.
Хенди