Я пытаюсь выяснить, какой метод перекрестной проверки лучше всего подходит для моей ситуации.
Следующие данные являются лишь примером для проработки проблемы (в R), но мои реальные X
данные ( xmat
) связаны друг с другом и в разной степени связаны с y
переменной ( ymat
). Я предоставил код R, но мой вопрос не о R, а о методах. Xmat
включает в себя переменные X от V1 до V100, в то время как ymat
включает одну переменную y.
set.seed(1233)
xmat <- matrix(sample(-1:1, 20000, replace = TRUE), ncol = 100)
colnames(xmat) <- paste("V", 1:100, sep ="")
rownames(xmat) <- paste("S", 1:200, sep ="")
# the real y data are correlated with xmat
ymat <- matrix(rnorm(200, 70,20), ncol = 1)
rownames(ymat) <- paste("S", 1:200, sep="")
Я хотел бы построить модель для прогнозирования y
на основе всех переменных в xmat
. Так что это будет модель линейной регрессии y ~ V1 + V2 + V3+ ... + V100
. Из обзора я вижу следующие три метода перекрестной проверки:
Разделите данные примерно на половину и используйте одну для обучения, а другую половину для тестирования (перекрестная проверка):
prop <- 0.5 # proportion of subset data set.seed(1234) # training data set training.s <- sample (1:nrow(xmat), round(prop*nrow(xmat),0)) xmat.train <- xmat[training.s,] ymat.train <- ymat[training.s,] # testing data set testing.s <- setdiff(1:nrow(xmat), training) xmat.test <- xmat[testing.s,] ymat.test <- ymat[testing.s,]
K-кратная перекрестная проверка - с использованием 10-кратной перекрестной проверки:
mydata <- data.frame(ymat, xmat) fit <- lm(ymat ~ ., data=mydata) library(DAAG) cv.lm(df=mydata, fit, m=10) # ten-fold cross validation
Маскирование одного или нескольких значений за раз : в этом методе мы случайным образом маскируем значение в наборе данных (y), заменяя его на NA и прогнозируя его. Процесс повторяется n раз.
n = 500 predicted.v <- rep(NA, n) real.v <- rep(NA, n) for (i in 1:n){ masked.id <- sample (1:nrow(xmat), 1) ymat1 <- ymat real.v[i] <- ymat[masked.id,] ymat1[masked.id,] <- NA mydata <- data.frame(ymat1, xmat) fit <- lm(ymat1 ~ ., data=mydata) predicted.v[i] <- fit$fitted.values[masked.id] }
Как узнать, что лучше для любой ситуации? Есть ли другие методы? Bootstrap validation
против CV
? Работающие примеры будут оценены.
источник
Ответы:
Поскольку ФП назначил награду за этот вопрос, он должен привлечь определенное внимание, и, следовательно, это подходящее место для обсуждения некоторых общих идей, даже если он не отвечает на ФП напрямую.
Во-первых, имена:
а) перекрестная проверка - это общее название для всех методов оценки / измерения, в которых используется набор тестов, отличный от набора поездов. Синоним: оценки вне выборки или вне выборки. Антоним: оценка в выборке.
Оценка в выборке - это методы, которые используют некоторую информацию об обучающем наборе для оценки качества модели (не обязательно ошибка). Это очень распространено, если модель имеет высокий уклон - то есть - она делает сильные предположения о данных. В линейных моделях (модель с высоким смещением), как в примере с вопросом, каждый использует R-квадрат, AIC, BIC, отклонение, как меру качества модели - все это оценки в выборке. В SVM, например, данные соотношений в опорном векторе к количеству данных, является оценкой в выборках погрешности модели.
Существует много методов перекрестной проверки:
б) удержание является методом № 1 выше. Разделите набор на тренировку и один тест. Существует долгая история обсуждения и практики относительно размеров обучения и тестового набора.
в) k- кратный - метод № 2 выше. Довольно стандартный.
г) Оставьте один-один - метод № 3 выше.
e) начальная загрузка : если ваш набор содержит N данных, случайным образом выберите из набора N выборок WITH REPLACEMENT и используйте его в качестве обучения. Данные из исходного набора, которые не были выборками, используются в качестве тестового набора. Существуют различные способы вычисления окончательной оценки погрешности модели, которая использует как погрешность для тестового набора (вне выборки), так и ошибку для комплекта поездов (в выборке). Смотрите, например, загрузчик .632. Я думаю, что есть также формула .632+ - это формулы, которые оценивают истинную ошибку модели, используя как ошибки выборки, так и ошибки выборки.
е) Ортогональным к выбору вышеописанного метода является вопрос повторения. Все вышеперечисленные методы могут быть повторены любое количество раз, кроме «Оставить один». На самом деле можно говорить о ПОВТОРНОМ удержании или ПОВТОРНОМ k- кратном. Чтобы быть справедливым, почти всегда метод начальной загрузки используется в повторяющемся режиме.
Следующий вопрос, какой метод «лучше». Проблема в том, что значит «лучше».
1) Первый ответ заключается в том, смещен ли каждый из этих методов для оценки погрешности модели (для бесконечного количества будущих данных).
2) Второй альтернативой является то, насколько быстро или насколько хорошо каждый из этих методов сходится к истинной модельной ошибке (если они не смещены). Я считаю, что это все еще тема исследования. Позвольте мне указать на эти две статьи (за окном), но реферат дает нам некоторое понимание того, чего они пытаются достичь. Также обратите внимание, что очень часто k -fold называют «перекрестной проверкой» отдельно.
Измерение ошибки прогноза. Сравнение методов перекрестной проверки, бутстрапа и ковариации
Оценка частоты ошибок классификации: повторная перекрестная проверка, повторное удержание и начальная загрузка
Вероятно, есть много других статей на эти темы. Это всего лишь несколько примеров.
3) Еще один аспект «лучше» заключается в следующем: учитывая конкретную меру ошибки модели, используя один из методов, описанных выше, насколько вы можете быть уверены, что правильная ошибка модели близка.
В общем, в этом случае вы хотите принять много мер ошибки и вычислить доверительный интервал (или достоверный интервал, если вы следуете байесовскому подходу). В этом случае проблема заключается в том, насколько вы можете доверять дисперсии набора показателей ошибок. Обратите внимание, что кроме метода «оставь один раз», все вышеприведенные методы дают много разных мер ( k мер для k- кратного, n мер для n- повторного удержания), и, таким образом, ты можешь измерить дисперсию (или стандартное отклонение). ) этого набора и вычислите доверительный интервал для меры ошибки.
Здесь все становится несколько сложнее. Из того, что я понимаю из статьи Нет объективной оценки дисперсии k- кратной перекрестной проверки (не за платной стеной), нельзя доверять дисперсии, которую вы получаете из k- кратного - поэтому нельзя построить хороший доверительный интервал из k - складки. Кроме того, из того, что я понимаю из бумаги Приблизительных статистических тестов для сравнения Контролируемой Классификации алгоритмов обучения (не за платный доступом), приемы , которые используют повторные меры (многократном ккратное повторное удержание - не уверен в начальной загрузке) переоценит истинную дисперсию меры ошибки (это довольно легко увидеть - поскольку вы производите выборку из конечного набора, если вы повторяете меру очень большое число раз повторяются одни и те же значения, которые сохраняют среднее значение, но уменьшают дисперсию). Таким образом, методы повторных измерений будут слишком оптимистичными по доверительному интервалу.
В этой последней статье предлагается сделать 5 повторных 2-кратных - которые он называет 5 × 2 CV - как хороший баланс многих мер (10), но не слишком много повторений.
РЕДАКТИРОВАТЬ:
Конечно, в Cross Validated есть отличные ответы на некоторые из этих вопросов (хотя иногда они не согласны между собой). Вот некоторые:
Перекрестная проверка или начальная загрузка для оценки эффективности классификации?
Различия между перекрестной проверкой и начальной загрузкой для оценки ошибки предсказания
Перекрестная проверка или начальная загрузка для оценки эффективности классификации?
Понимание начальной загрузки для проверки и выбора модели
В общем, кросс-проверка тега - это ваш друг.
Так что же является лучшим решением? Я не знаю. Я использовал 5 × 2 CV, когда мне нужно быть очень строгим, когда я должен быть уверен, что один метод лучше другого, особенно в публикациях. И я использую удержание, если я не планирую делать какие-либо измерения отклонения или стандартного отклонения, или если у меня есть ограничения по времени - в удержании есть только одна модель обучения .
источник
Пожалуйста, обратитесь к странице Википедии для определения методов (они выполняют намного лучшую работу, чем я мог бы сделать здесь).
После того, как вы просмотрели эту страницу, вам может помочь следующее. Позвольте мне сосредоточиться на той части вопроса, где нужно выбрать один из этих методов для процесса моделирования. Поскольку это довольно частый выбор, который можно сделать, и они могут получить дополнительные знания, вот мой ответ для двух ситуаций:
В любой ситуации : используйте
k-fold cross validation
с подходящим количеством повторений (скажем, 5 или 10).Разделение данных на 1 половину, тренировка в первой половине и проверка в другой - это один из этапов двукратной перекрестной проверки (другой шаг - повторение одного и того же упражнения с взаимозаменяемостью двух половин). Следовательно, исключите стратегию «разбить данные на половину».
Во многих статьях по машинному обучению и интеллектуальному анализу данных используется перекрестная проверка в k-кратном порядке (без цитирования), поэтому используйте ее, если на этом этапе не нужно быть очень осторожным.
Теперь оставьте один метод out, а другие методы, такие как « выйти из » и « случайное разбиение и повторение » (по сути, процесс, подобный процессу начальной загрузки, описанный выше), безусловно, являются хорошими соперниками.
Если ваш размер данных N, тогда N-кратная перекрестная проверка, по сути, такая же, как и пропуск одной.
'exit p out' и 'bootstrap' немного отличаются от проверки перекрестного сгиба k, но разница, по сути, заключается в том, как определяются сгибы и количество повторений k, которые происходят.
Как написано на вики-странице, и k-fold, и « drop p out » являются приличными оценками « ожидаемой производительности / соответствия » (хотя ставки отклоняются в отношении дисперсии этих оценок).
Ваша ситуация: у вас есть только размер выборки 200 по сравнению с количеством функций (100). Я думаю, что есть очень высокая вероятность того, что несколько линейных моделей дают одинаковую производительность. Я бы предложил использовать перекрестную проверку в k-кратном порядке с> 10 повторениями . Выберите значение 3 или 5.
Причина значения k: общий выбор.
Причина повторного значения: прилично высокое значение для повторения, вероятно, является здесь критическим, поскольку выходные данные однократного вычисления перекрестной проверки в k-кратном размере могут быть приемлемыми для изменчивости / случайности расщепления по кратности, которые мы вводим.
Дополнительные мысли:
Может быть, я бы также использовал методы « exit p out » и « bootstrap как случайное разделение повторов » (в дополнение к перекрестной проверке в k-кратном размере) для той же меры производительности / подгонки, чтобы проверить, выглядят ли выходные данные моего метода перекрестной проверки в k-кратном порядке.
Хотя вы хотите использовать все 100 функций, как кто-то предложил, обратите внимание на мультиколлинеарность / корреляцию и, возможно, уменьшите количество функций.
источник
rms
пакетеvalidate
иcalibrate
функциях R.