계층화 된 교차 검증을 사용하는 이유는 무엇입니까? 이것이 왜 분산 관련 혜택을 손상시키지 않습니까?


28

응답 클래스의 균형이 맞지 않을 때 특히 계층화 된 교차 유효성 검사를 사용하는 것이 좋습니다. 교차 검증의 한 가지 목적이 원래의 훈련 데이터 샘플의 무작위성을 설명하는 데 도움이되는 경우, 원래 훈련 세트에 대표 클래스 분포가 있는지 확실하지 않은 한 각 배에 동일한 클래스 분포를 갖는 것은 이것에 대해 작동하는 것입니다.

내 논리에 결함이 있습니까?

편집 이 방법이 CV의 장점을 손상시키는 지에 관심이 있습니다. 작은 샘플 / 매우 불균형 클래스가 있거나 둘 다 작은 클래스의 단일 대표자가 접히지 않도록하는 것이 왜 필요한지 알 수 있습니다.

용지 사과 - 투 - 사과 교차 검증 연구에서 : 함정 분류 성능 측정에 박았 잘 층화의 경우를 전달하지만, 모든 인수는 '계층화가 보호하고 더 일관성을 제공'에 양을 보일하지만 보호 주어진 충분히 할 필요가 없습니다 것 데이터.

답은 "충분한 데이터가 거의 없기 때문에 필요에 따라 사용하는 것입니다." ?

답변:


18

부트 스트랩 핑은 모집단에서 새 샘플을 추출하는 효과를 시뮬레이트하기 위해 별도의 테스트 세트 (N을 N으로 교체 한 후 N 샘플링 이후의 잔류 물)를 보장하지 않습니다.

RxK- 폴드 교차 검증은 K 개의 개별 테스트 폴딩을 보장하지만 K-CV에 대한 독립 가정이 유지 될 수 있도록 다른 랜덤 파티셔닝에 대해 R 번 반복됩니다. 그러나 이것은 반복으로 손실됩니다.

계층화 된 교차 검증은 통계가 계산되기 전에 테스트 레이블을 보지 말아야한다는 원칙을 위반하지만, 일반적으로 주름의 균형을 맞추는 유일한 효과이므로 무해한 것으로 생각되지만 다양성의 손실로 이어집니다 ( 원치 않는 분산 손실). 전체 모집단에서 자연스럽게 그리는 것과 유사한 샘플을 구성하는 Boostrap 아이디어에서 더 멀리 이동합니다. 계층화가 중요한 주된 이유는 분류 알고리즘의 결함이 클래스의 과도하거나 과도하게 표현되어 너무 쉽게 편향되기 때문에 분류 알고리즘의 결함을 해결하는 것입니다. 밸런싱 기술 (선택 또는 가중치 기준)을 사용하거나 우연한 측정 값 (Kappa 또는 바람직하게는 정보 제공)을 최적화하는 알고리즘은 영향을 덜받습니다.

각각의 폴드에 각 클래스의 인스턴스가 m 개 이상 (소규모 m)이되도록하는 것은 부트 스트랩과 CV 모두에서 작동하는 계층화의 대안입니다. 접는 편향이있어 접힘이 예상보다 균형 잡힌 경향이 있습니다.

앙상블 및 다양성 : 교육 오류에 대해 배운 분류자가 일반화 오류의 추정뿐만 아니라 융합에 사용되는 경우 CV의 강성 증가, 계층화 된 부트 스트랩 및 계층화 된 CV는 부트 스트랩, 강제 부트 스트랩에 비해 다양성 손실 및 잠재적 탄력성을 초래합니다. 강제 이력서.


강제 부트 스트랩이 "더 나은"계층화 된 부트 스트랩이 "실패"하는 방법에 대한 참조 문서를 제공 할 수 있습니까?
usεr11852는

16

아마도 당신은 이런 식으로 생각할 수 있습니다. 'A'클래스에서 90 개, 'B'클래스에서 10 개, 100 개의 샘플이있는 데이터 세트가 있다고 가정합니다. 균형이 잘 잡히지 않은이 디자인에서는 정상적인 무작위 그룹을 만들면 'B'클래스에서 극소수 (또는 EVEN NONE!)로 모델을 만들 수 있습니다. 다른 클래스가 거의 없거나 전혀없는 데이터에 대해 훈련 된 모델을 구축하는 경우 어떻게 희귀 한 그룹을 효과적으로 예측할 수 있을까요? 계층화 된 교차 검증은 무작위 화를 허용하지만 이러한 불균형 데이터 세트에 두 클래스 중 일부가 있는지 확인합니다.

보다 '균형화 된'데이터 세트와 함께 계층화 된 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 분산이 증가하기 때문에 성능이 저하 된 모델로 이어질 수 있습니다. 분포에 매우 큰 차이가있을 가능성이있는 '제한된'표본이있을 때 이것은 더욱 중요합니다.

이제 매우 큰 데이터 세트를 사용하면 주름이 최소한 'rarer'클래스의 비율을 충분히 포함 할만큼 충분히 크므로 계층화가 필요하지 않을 수 있습니다. 그러나 내 개인적인 의견에 얼마나 많은 데이터가 있더라도 샘플의 균형이 맞지 않으면 계산 손실이없고 계층화를 포기할 실제적인 이유가 없습니다.


그렇습니다. 그러나 이것은 매우 구체적인 경우이며 데이터 부족을 설명하기 위해 수행하고 있습니다. 10,000 개의 샘플이 있다면 그렇게 하시겠습니까? 내 질문은 이상적으로 충분한 데이터가 주어지면 좋은 생각입니까?
James Owers

1
@ kungfujam, 그것은 데이터의 불균형에 달려 있습니다. 엄청난 양의 데이터가 있더라도 다른 임의의 클래스는 거의 없습니다 (임의로). 이것에 관한 몇 가지 연구가 있습니다. 조금 오래되었지만 Kohavi이를 보고했습니다 stratifcation is generally a better scheme, both in terms of bias and variance, when compared to regular cross-validation. 완벽한 샘플링 방식은 없지만 불균형 설계에서는 층화가 좋습니다.
cdeterman

감사합니다. 방금 Kohavi 논문을 찾았습니다. 오래되었지만 금. 나는 일반적인 클래스에서 완벽하게 균형이 잡히지 않고 데이터가 제한적이라는 것을 알 수 있습니다. => 계층화가 일반적으로 더 낫습니다.
James Owers

@ kungfujam, 당신은 어떤 부분을 위반으로 간주합니까? k- 폴드는 특정 비율의 상이한 그룹을 필요로하는 것을 제외하고는 무작위 화된다. 각 그룹에서 폴드를 무작위로 생성하고 하나의 집계 폴드에 대해 결합하여 관심있는 무작위를 유지하는 것으로 생각할 수 있습니다. 합리적인 균형 (예 : 60 % -40 %)을 감안할 때, 겹침은 층화의 유무에 관계없이 비슷한 비율을 가질 것입니다 (일부 변형).
cdeterman

1
나는 그것이 요점을이기는 것처럼 느낀다. 원래 샘플은 '무작위'입니다. 따라서 CV는이를 고려하여 다양한 리샘플링을 생성하고 입력 데이터 변경에 따라 달라지는 모델에 불이익을 가하여 분산에 대한보다 강력한 모델을 생성해야한다고 생각했습니다. 원래 샘플의 비율과 일치하도록 접기를 제한하면 어떤 의미에서 폴드를 멈추는 것처럼 느꼈습니다. 편향이 더 낮은 모델을 생성 할 수도 있지만 분산이 더 높을 것이라고 생각합니다.
James Owers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.