부스팅에 대한 가방 외부 오류 추정치?


9

랜덤 포레스트에서 각 트리는 고유 한 부 스트랩 데이터 샘플에서 병렬로 성장합니다. 각 부 스트랩 샘플에는 고유 한 관측치의 약 63 %가 포함될 것으로 예상되므로, 관측치의 약 37 %가 트리 테스트에 사용될 수 있습니다.

이제 확률 적 그라디언트 부스팅에서는 RF와 비슷한 추정치가있는 것 같습니다.OOBerror

bag.fraction이 0보다 큰 값 (0.5 권장)으로 설정되면 gbm은 예측 성능 향상에 대한 백 밖 추정을 계산합니다. 다음 회귀 트리를 선택하는 데 사용되지 않은 관측치에 대한 이탈 감소를 평가합니다.

출처 : Ridgeway (2007) , 섹션 3.3 (8 페이지).

작동 방식 / 유효성을 이해하는 데 어려움이 있습니다. 시퀀스에 트리를 추가한다고 가정 해보십시오. 원래 데이터 세트의 임의 하위 샘플에서이 트리를 확장하고 있습니다. 이 단일 트리를 키우기 위해 사용되지 않은 관측치에서 테스트 할 수있었습니다. 동의했다. 그러나 Boosting은 순차적 이기 때문에 지금까지 구축 된 전체 트리 시퀀스 를 사용하여 왼쪽 관측에 대한 예측을 제공합니다. 그리고 이전의 많은 나무들이 이미 이러한 관찰을 보았을 가능성이 높습니다. 따라서 모델은 RF와 같이 보이지 않는 관측에 대해 각 라운드에서 실제로 테스트되지 않습니다.

그렇다면 이것을 "가방 밖"오류 추정치라고하는 방법은 무엇입니까? 저에게, 관측 결과가 이미 보여진 이후로 어떤 가방에서 "나온"것처럼 보이지 않습니까?


1
github.com/scikit-learn/scikit-learn/pull/1806 의 토론을 참조하십시오 . OOB 추정값이 계산되는 방식에 대해 우려를 표명하는 데 혼자가 아닙니다.
mpiktas

링크 주셔서 감사하지만 불행히도 모든 스레드 기고자가 나만큼 잃어버린 것 같습니다!
Antoine

1
사실은 아니야 github.com/scikit-learn/scikit-learn/pull/2188을 참조하십시오 . 이 커밋에서 OOB 점수는 gbm이 수행하는 방식으로 OOB 개선으로 변경됩니다. 이 아이디어가 어떻게 작동하는지 잘 모르겠지만, 내가 수집 한 것으로부터 현재 트리의 OOB 샘플을 사용하여 OOB 개선을 계산합니다. 나는 수학 공식을 찾지 못했습니다.이 개선 사항이 얼마나 정확하게 계산되는지 보려면 gbm 코드를 파헤쳐 야합니다.
mpiktas

@Antoine 정말 흥미로운 질문입니다! 명확한 답변을 찾았습니까?
Soren Havelund Welling

1
안타깝게도 위의 링크 (주석에있는),이 스레드 및이 다른 스레드에 의해 힌트가 제공됩니다 . 이것은 나를 완전히 미치게합니다. 언젠가 누군가 Friedman / Hastie 박사에게 이메일을 보내야합니다.
Antoine

답변:


2

부분적으로 만 응답하고 질문에 새 질문을 추가합니다.

R http://www.rdocumentation.org/packages/gbm/functions/gbm 의 gbm 구현에는 가방 외부를 조정하기위한 두 개의 매개 변수가 있습니다.

a) train.fraction모든 나무를 훈련시키는 데 사용되는 데이터의 비율을 정의하므로 1- train.fraction실제 OOB (가방 밖) 데이터가됩니다.

b) bag.fraction부스트에서 다음 트리 생성에 사용될 훈련 데이터의 비율을 정의합니다. 따라서 트리 생성에 사용되지 않은 일부 데이터가있을 수 있으며 실제로 OOB 데이터로 사용될 수 있습니다 (그러나 가능성은 낮습니다. 아래 질문 참조).

어느 것이 나를 질문으로 인도합니다. OOB 인 데이터의 37 %에 대한 분석은 하나의 트리에만 해당됩니다. 그러나 모든 트리에서 사용되지 않는 데이터가있을 가능성은 훨씬 작습니다.0.37아르 자형이자형이자형에스 (모든 사람을 위해 OOB에 있어야 함 아르 자형이자형이자형나무-내 이해는 각 나무가 자체 부트 스트랩을 수행한다는 것입니다. 따라서 RandomForests에서는 포리스트를 테스트하기 위해 OOB가 될 가능성이 거의 없습니다. 그럼에도 불구하고 (Breiman의 원본 코드 기준) R의 랜덤 포레스트 구현 (결과 데이터 예를 들어 OOB에 대해 많은 것을 이야기 err.rate하고 confusion참조 http://www.rdocumentation.org/packages/randomForest/functions/randomForest를 )

나는 그것에 대답하는 방법을 모른다. (그리고 질문을하고 randomForests 의이 측면을 이해하지 못한다는 사실을 깨닫게 해 준 (+1)에게 감사한다). 가능한 해결책은 부트 스트랩이 하나만 있고 모든 트리가 그것으로부터 구성된다는 것입니다. 그러나 제가 아는 한, 그렇지 않습니다.


RF / Bagging의 경우 문제가 없습니다. 앙상블 구축 프로세스의 특정 단계에서 원본 데이터 세트의 모든 관측 값이이 관측 값이없는 부 스트랩 샘플에 대해 훈련 된 모든 트리에 제공 될 수 있습니다. 총 나무 수의 약 1/3 (~ 37 %)이이 조건을 충족합니다. 또한,이 나무를 투표하고 가장 인기있는 수업을함으로써 관찰에 대한 예측을 얻을 수 있습니다. 예측이 모든 클래스에 대해 평균화 된 관측치의 실제 레이블과 다른 횟수는 가방 밖 오류 추정치
Antoine

1
또한 Boosting에서 OOB 오류 추정 기능을 제공하는 것은 train.fraction매개 변수 (gbm 기능의 기능이지만 원래 알고리즘에는 존재하지 않음)에서 오는 것이 아니라 실제로는 데이터는 시퀀스에서 각 트리를 학습하는 데 사용되며, 관찰에 사용되지 않습니다 (테스트에 사용 가능). 원래 질문으로 돌아갑니다. 이 관측 값은 시퀀스의 많은 선행 트리에서 여러 번 보았으므로 테스트에 어떻게 사용할 수 있습니까?
Antoine

RF의 각 트리는 실제로 원래 데이터의 고유 한 고유 부트 스트랩 샘플로 구축되었다는 사실을 언급하지
Antoine

RF에 대한 설명을 보내 주셔서 감사합니다. 따라서 RF의 OOB 오류는 실제로 숲에있는 나무의 1/3 만 평가하는 것입니다 (매우 유용하지는 않습니다). 글쎄, 매일 무언가를 배우십시오.
Jacques Wainer

어쨌든 train.fraction 매개 변수는 귀하의 질문에 대한 답변 인 것 같습니다. sklearn 구현은 서브 샘플과 유사한 매개 변수를 가지고 있습니다 ( scikit-learn.org/stable/modules/generated/…
Jacques Wainer

-2

나는 그들이 각 단계에서 가방을 추정하지 않는다고 생각합니다. 모든 단계의 결과가 계수와 함께 추가되므로 OOB 오류도 같은 계수로 추가 할 수 있습니다.

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