예측 오차를 추정하기위한 교차 검증과 부트 스트랩의 차이점


102

교차 유효성 검사와 부트 스트랩의 차이점에 대한 귀하의 생각을 예측 오류로 추정하고 싶습니다.

작은 데이터 세트 크기 또는 큰 데이터 세트에 더 효과적입니까?

답변:


88

그것은 (평소와 같이) 분산과 편견으로 귀착됩니다. CV는 덜 편향되는 경향이 있지만 K- 폴드 CV는 상당히 큰 편차를 가지고 있습니다. 반면에 부트 스트랩은 분산을 크게 줄이지 만 더 편향된 결과를 제공합니다 (비관적 인 경향이 있음). 다른 부트 스트랩 방법은 부트 스트랩 바이어스 (632 및 632+ 규칙 등)를 처리하도록 조정되었습니다.

다른 두 가지 접근 방식은 "몬테 카를로 CV"(일명 "리브 그룹 아웃 CV")로 데이터의 여러 랜덤 분할 (미니 트레이닝 및 테스트 스플릿과 같은 정렬)을 수행합니다. 이 방법의 경우 분산이 매우 낮고 홀드 아웃의 데이터 백분율이 낮 으면 바이어스가 나쁘지 않습니다. 또한 반복 된 CV는 K 배를 여러 번 수행하고 일반 K 배와 비슷한 결과를 평균합니다. 낮은 편향을 유지하고 분산을 줄이기 때문에 나는 이것에 가장 부분적입니다.

편집하다

큰 표본 크기의 경우 분산 문제가 덜 중요 해지고 계산 부분이 더 큰 문제입니다. 작고 큰 샘플 크기에 대해서는 반복적 인 CV를 계속 사용합니다.

일부 관련 연구는 다음과 같습니다 (Emp Kim 및 Molinaro).

참고 문헌

Bengio, Y. & Grandvalet, Y. (2005). k- 폴드 교차 검증의 분산을 추정 할 때의 편차. 복잡한 데이터 문제에 대한 통계 모델링 및 분석, 75–95.

Braga-Neto, UM (2004). 교차 검증은 소 표본 마이크로 어레이 분류 Bioinformatics, 20 (3), 374–380에 유효합니다. doi : 10.1093 / 생물 정보학 / btg419

에프론, B. (1983). 예측 규칙의 오류율 추정 : 교차 검증 개선. 미국 통계 협회 저널, 316–331.

Efron, B., & Tibshirani, R. (1997). 교차 유효성 검사 개선 사항 : 632+ 부트 스트랩 방법. 미국 통계 협회 저널, 548–560.

Furlanello, C., Merler, S., Chemini, C., & Rizzoli, A. (1997). 부트 스트랩 632+ 규칙을 생태 데이터에 적용 97 년.

Jiang, W. & Simon, R. (2007). 마이크로 어레이 분류에서 예측 오차를 추정하기위한 부트 스트랩 방법과 조정 된 부트 스트랩 접근법의 비교. 의학 통계, 26 (29), 5320–5334.

Jonathan, P., Krzanowski, W. 및 McCarthy, W. (2000). 다변량 예측의 성능을 평가하기 위해 교차 검증을 사용합니다. 통계 및 컴퓨팅, 10 (3), 209–229.

김제이 (2009). 분류 오류 추정치 : 반복 교차 검증, 반복 보류 및 부트 스트랩. 전산 통계 및 데이터 분석, 53 (11), 3735–3745. 도 : 10.1016 / j.csda.2009.04.009

Kohavi, R. (1995). 정확도 추정 및 모델 선택을위한 교차 검증 및 부트 스트랩에 대한 연구. 인공 지능에 관한 국제 공동 회의, 14, 1137–1145.

Martin, J., & Hirschberg, D. (1996). 분류 오류율 I에 대한 작은 샘플 통계 : 오류율 측정.

AM Molinaro, AM (2005). 예측 오류 추정 : 리샘플링 방법의 비교. 생물 정보학, 21 (15), 3301–3307. doi : 10.1093 / 생물 정보학 / bti499

Sauerbrei, W., & Schumacher1, M. (2000). 데이터 중심 회귀 모델의 복잡성을 평가하기위한 부트 스트랩 및 교차 검증 의료 데이터 분석, 26–28.

RJ Tibshirani, & Tibshirani, R. (2009). 교차 검증에서 최소 오류율에 대한 바이어스 보정. Arxiv 프리 프린트 arXiv : 0908.2904.


2
부트 스트랩 바이어스는 비관적이지 않으며 낙관적입니다 (간단한 부트 스트랩은 .0632가 아님). 이는 Bootstrap이 많은 학습 요소를 사용하여 모델을 테스트하여 샘플 오류에 많은 가중치를 부여하기 때문입니다.
D1X

33

@Frank Harrell은이 질문에 많은 노력을 기울였습니다. 나는 구체적인 언급을 모른다.

그러나 나는 두 가지 기술이 다른 목적을위한 것이라고 생각합니다. 교차 검증은 모델을 결정할 때 유용한 도구입니다. 실제로 과적 합할 때 좋은 모델을 가지고 있다고 스스로를 속이는 것을 피할 수 있습니다.

모델이 고정되면 부트 스트랩을 사용하는 것이 더 의미가 있습니다 (적어도 나에게는).

http://www.burns-stat.com/pages/Tutor/bootstrap_resampling.html 에서 R을 사용하여 이러한 개념에 대한 소개 (추가 순열 테스트)가 있습니다 .


2
먼저 CV를 사용하여 모델을 선택한 다음 동일한 데이터에서 부트 스트랩을 사용하여 추정값의 오류를 평가하는 것이 합리적입니까? 특히 알려지지 않은 비 가우시안 노이즈가있는 데이터에서 ML을 사용하여 선형 회귀를 수행하고 싶습니다.
sebhofer

9

저의 이해는 부트 스트랩은 모델의 불확실성을 정량화하는 방법이며 교차 검증은 모델 선택 및 예측 정확도 측정에 사용됩니다.


답변 주셔서 감사합니다. 작은 데이터 세트 (<30 obs)가 있으면 부트 스트랩이 더 나은 것으로 생각했습니다. 아니?
부여

그렇게 생각합니다. 표본 크기가 작은 경우 교차 검증이 적합하지 않을 수 있습니다. 하나의 교차 유효성 검사를 생략 할 수는 있지만 지나치게 낙관적 인 경향이 있습니다.
Glen

또한 작은 샘플로 부트 스트랩을 수행하면 Efron의 원래 논문에 명시된 바와 같이 약간의 추정치가 발생할 수 있습니다.
Glen

예측 정확도를 측정하는 것이 불확실성을 정량화하는 방법이 아닙니까? CV가 모델 선택에 더 일반적이라는 것을 알고 있지만 LASSO에 대한 AUC를 추정하려고하는데 CV 또는 부트 스트랩이 더 낫습니까?
Max Ghenis

9

한 가지 차이점은 jackknife와 같은 교차 유효성 검사는 모든 데이터 포인트를 사용하지만 데이터를 무작위로 다시 샘플링하는 부트 스트랩은 모든 포인트에 도달하지 않을 수 있다는 것입니다.

원하는만큼 부트 스트랩 할 수 있습니다. 즉, 더 큰 재 샘플링은 더 작은 샘플에 도움이됩니다.

교차 검증 또는 잭나이프 평균은 샘플 평균과 동일하지만 부트 스트랩 평균은 샘플 평균과 거의 같지 않습니다.

교차 검증 및 잭나이프 가중치는 모든 표본 포인트의 가중치가 동일하므로 부트 스트랩보다 신뢰 구간이 더 작아야합니다.


2
닐, 당신의 진술 중 적어도 2 개가 틀린 것 같습니다. 1. 각각의 특정 부 스트랩 샘플이 원래 데이터 포인트의 ~ 63 %를 차지하지만 일반적으로 수행하는 것처럼 많은 (예 : 10k) 부트 스트랩 샘플을 샘플링 할 경우 각 포인트가 적어도 하나에서 커버 될 확률은 본질적으로 100 %입니다. 2. 방금 빠른 수치 점검을 ​​수행했습니다. 부트 스트랩 및 부트 아웃 스트랩 샘플의 평균은 전체 데이터 평균에 매우 가깝습니다. 직접 확인할 수 있습니다
Kochede

다음은 코드입니다 (형식을 보려면 "편집"을 클릭하십시오). numpy를 np로 가져오고 팬더를 pd로 가져 오기 n = 1000 B = 1000 y = np.random.randn (n) meansb, meansoob = [], [] 범위 (B) : ib = np.random.choice (n, n, replace = True) meanb = y [ib] .mean () meansb.append (meanb) indoob = np.ones (n, dtype = bool) indoob [ib] = False meanoob = y [indoob] .mean () meansoob.append (meanoob) pd.Series (meansb) .hist (histtype = 'step') pd.Series (meansoob) .hist (histtype = 'step' ) 인쇄 np.mean (meansb), np.mean (meansoob), pd.Series (y) .mean ()
Kochede

@Kochede "본질적으로 100 %"는 100 %가 아닙니다. "평균에 거의 근접"은 평균과 정확히 동일하지 않습니다. 족제비 단어를 사용하고 있습니다. 난 틀렸어
닐 맥기 건

그래서 당신은 오답을 줄뿐만 아니라, demagogy로도 주장합니다. 부트 스트랩 샘플에 의한 예상 데이터 범위는 샘플 수가 증가함에 따라 100 %로 빠르게 수렴됩니다. 위의 실험에서 10 개 미만의 부트 스트랩 샘플 후 모든 데이터 포인트가 부트 스트랩에 의해 적중되었습니다. 마찬가지로 부트 스트랩 샘플의 평균 기대치는 샘플 평균 과 같습니다 . 위의 실험에서 1000 부트 스트랩 이후 샘플 차이는 0.1 % 미만입니다 (randn의 평균이 0이므로 randn 대신 np.random.rand 사용)
Kochede

다음은 참조를 위해 업데이트 된 코드입니다. import numpy as np, pandas as pd; n = 1000; B = 1000; y = np.random.rand (n); meansb = []; 커버 = np.zeros (n, dtype = bool); 적용 범위 = []; 범위 (B)에서 b에 대한 루프 시작 : ib = np.random.choice (n, n, replace = True); 적용 [ib] = True; coverage.append (covered.sum () * 1.0 / n); meanb = y [ib] .mean (); meansb.append (meanb); #end loop print coverage [: 10]; 인쇄 np.mean (meabsb), pd.Series (y) .mean (); print (np.mean (meabsb)-pd.Series (y) .mean ()) / pd.Series (y) .mean ();
Kochede

2

다음은 리샘플링의 두 가지 기술입니다.

교차 검증에서는 데이터를 무작위로 kfold로 나누고 과적 합에 도움이되지만이 방법에는 단점이 있습니다. 임의의 샘플을 사용하므로 일부 샘플은 중대한 오류를 생성합니다. CV를 최소화하기 위해서는 기술이 있지만 분류 문제에는 그다지 강력하지 않습니다. 부트 스트랩이 도움이되며 자체 샘플 검사의 오류를 개선합니다. 자세한 내용은 참조하십시오.

https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/cv_boot.pdf

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.