Зачем использовать стратифицированную перекрестную проверку? Почему это не наносит ущерба дисперсии?


29

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

Моя логика ошибочна?

РЕДАКТИРОВАТЬ Меня интересует, повредит ли этот метод пользе CV. Я понимаю, почему это необходимо, если у вас небольшая выборка / очень несбалансированные классы / оба, чтобы не иметь ни одного представителя младшего класса в сгибе.

В статье « Яблоки к яблокам в перекрестной валидации: ошибки в измерении эффективности классификатора» выдвигается аргументация в пользу стратификации, но все аргументы, по-видимому, сводятся к «Стратификации обеспечивает защиту и большую согласованность», но никакой защиты не потребуется, если достаточно данные.

Является ли ответ просто «Мы используем это по необходимости, поскольку у нас редко бывает достаточно данных». ?

Ответы:


18

Начальная загрузка стремится симулировать эффект отбора новой выборки из популяции и не стремится обеспечить отличные тестовые наборы (остатки после N из N выборки с заменой).

Перекрестная проверка RxK-сгибов обеспечивает K различных тестовых сгибов, но затем повторяется R раз для разных случайных разбиений, чтобы допустить сохранение предположений о независимости для K-CV, но это теряется при повторении.

Стратифицированная перекрестная проверка нарушает принцип, по которому метки испытаний никогда не должны просматриваться до вычисления статистики, но это, как правило, считается безвредным, поскольку единственный эффект - это сбалансировать сгибы, но это приводит к потере разнообразия ( нежелательная потеря дисперсии). Это еще дальше от идеи Boostrap по созданию выборки, аналогичной той, которую вы естественным образом извлекли бы из всего населения. Возможно, главная причина стратификации - это устранение дефектов в алгоритмах классификации, так как они слишком легко смещаются из-за чрезмерного или недостаточного представления классов. Алгоритм, который использует методы балансировки (либо путем отбора, либо взвешивания), либо оптимизирует меру «случайно-корректно» (Каппа или, предпочтительно, «Информированность»), менее подвержен этому влиянию, хотя даже такие алгоритмы могут

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

Ансамбли и разнообразие: если классификаторы, изученные на тренировочных сгибах, используются не только для оценки ошибки обобщения, то увеличение жесткости CV, стратифицированного Bootstrap и стратифицированного CV приводит к потере разнообразия и потенциальной устойчивости по сравнению с Bootstrap, принудительным Bootstrap и принудительное резюме.


Можно ли предоставить некоторые справочные документы о том, как стратифицированная бутстрап «терпит неудачу», где форсированный бутстрап «лучше»?
usεr11852 говорит восстановить Monic

16

Возможно, вы можете думать об этом таким образом. Допустим, у вас есть набор данных, в котором 100 выборок, 90 в классе «А» и 10 в классе «В». В этом очень несбалансированном дизайне, если вы делаете обычные рандомизированные группы, вы можете в конечном итоге построить модели на очень немногих (или ДАЖЕ НЕТ!) Из класса 'B'. Если вы строите модель, которая обучается на данных, где так мало, или даже нет, данных другого класса, как вы могли бы ожидать, что она будет эффективно предсказывать более редкую группу? Стратифицированная перекрестная проверка допускает рандомизацию, но также гарантирует, что эти несбалансированные наборы данных имеют некоторые из обоих классов.

Чтобы успокоить опасения по поводу использования стратифицированного CV с более «сбалансированными» наборами данных, давайте рассмотрим пример с использованием кода R.

require(mlbench)
require(caret)
require(cvTools)

# using the Sonar dataset (208 samples)
data(Sonar)

# see the distribution of classes are very well balanced
prop.table(table(Sonar$Class))

> prop.table(table(Sonar$Class))

M         R 
0.5336538 0.4663462 

# stratified
# set seed for consistency
# caret::createFolds does stratified folds by default
set.seed(123)
strat <- createFolds(Sonar$Class, k=10)

# non-stratified using cvTools
set.seed(123)
folds <- cvFolds(nrow(Sonar), K=10, type="random")
df <- data.frame(fold = folds$which, index = folds$subsets)
non_strat <- lapply(split(df, df$fold), FUN=function(x) x$index)

# calculate the average class distribution of the folds
strat_dist <- colMeans(do.call("rbind", lapply(strat, FUN = function(x) prop.table(table(Sonar$Class[x])))))
    non_strat_dist <- colMeans(do.call("rbind", lapply(non_strat, FUN = function(x) prop.table(table(Sonar$Class[x])))))
strat_dist
> strat_dist
M         R 
0.5338312 0.4661688 
non_strat_dist
> non_strat_dist
M         R 
0.5328571 0.4671429 

Как вы можете видеть, в хорошо сбалансированном наборе данных складки будут иметь аналогичное распределение по случайной случайности. Поэтому в этих обстоятельствах стратифицированное резюме является просто мерой доверия. Тем не менее, для устранения дисперсии вам нужно будет посмотреть распределение каждого сгиба. В некоторых случаях (даже начиная с 50-50) у вас могут быть случайные фолды со сплитами 30-70 (вы можете запустить приведенный выше код и увидеть, что это происходит на самом деле!). Это может привести к худшей производительности модели, поскольку у нее недостаточно одного класса для точного прогнозирования, что увеличивает общую вариацию CV. Это, очевидно, более важно, когда у вас есть «ограниченные» выборки, где вы, скорее всего, будете иметь очень большие различия в распределении.

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


Да, это имеет смысл. Тем не менее, это очень специфический случай, и вы делаете это, чтобы объяснить нехватку данных. Если бы у вас было 10000 образцов, вы бы сделали это? Мой вопрос, в идеале и учитывая достаточно данных, это хорошая идея?
Джеймс Оверс

1
@kungfujam, это зависит от того, насколько несбалансированны ваши данные. Даже с огромными объемами данных вы можете получить очень мало других классов (случайным образом). Есть некоторые исследования по этому поводу. Хотя Кохави немного устарел, об этом сообщил stratifcation is generally a better scheme, both in terms of bias and variance, when compared to regular cross-validation. Не существует идеальной схемы отбора проб, но в несбалансированных конструкциях стратификация является хорошим подходом.
cdeterman

Спасибо тебе за это. Я только что нашел бумагу Кохави. Старый но золотой. Я вижу, что в целом классы не идеально сбалансированы, а данные ограничены => стратификация в целом лучше ... но при разумном балансе я чувствую, что это нарушение!
Джеймс Оверс

@kungfujam, какую часть вы считаете нарушением? K-складки рандомизированы, за исключением того, что они требуют определенной доли разных групп. Вы можете думать об этом как о случайном создании ваших фолдов из каждой группы и объединении их вместе для одного совокупного фолда, тем самым сохраняя рандомизацию, которая вас беспокоит. При разумном балансе (например, 60% -40%) вполне вероятно, что ваши складки будут иметь одинаковые пропорции в любом случае со стратификацией или без нее (некоторая вариация, конечно).
cdeterman

1
Я чувствую, что это побеждает суть. Ваш оригинальный образец «случайный». Таким образом, я подумал, что CV должен был попытаться учесть это, производя различные повторные выборки, и привести вас к созданию более устойчивой модели к дисперсии, оштрафовав модели, которые меняются при изменении входных данных. Если вы ограничите свои сгибы, чтобы они соответствовали пропорциям исходного сэмпла, я чувствовал, что в некотором смысле вы мешаете этому делать. Вы вполне можете создать модель с более низким смещением, но я считаю, что она будет иметь более высокую дисперсию.
Джеймс Оверс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.