랜덤 포레스트-오버 피팅 처리 방법


41

컴퓨터 과학 배경을 가지고 있지만 인터넷에서 문제를 해결하여 데이터 과학을 가르치려고합니다.

나는 지난 몇 주 동안이 문제를 연구 해 왔습니다 (약 900 행과 10 기능). 처음에는 로지스틱 회귀를 사용했지만 이제는 임의의 포리스트로 전환했습니다. 훈련 데이터에서 임의의 포리스트 모델을 실행하면 auc (> 99 %)의 값이 실제로 높아집니다. 그러나 테스트 데이터에서 동일한 모델을 실행하면 결과가 좋지 않습니다 (정확도는 약 77 %). 이로 인해 훈련 ​​데이터가 적합하지 않다고 생각합니다.

임의의 포리스트에서 과잉 맞춤 방지에 대한 모범 사례는 무엇입니까?

r과 rstudio를 개발 환경으로 사용하고 있습니다. 내가 사용하고 randomForest패키지를 모든 매개 변수에 대한 기본값을 수락


4
Breiman은 RF가 과적 합하지 않는다고 주장합니다. stat.berkeley.edu/~breiman/RandomForests/cc_home.htm 그가 옳다는 가정하에 아마도 훈련과 테스트 세트간에 불일치가 있습니까?
복원 Monica Monica

RF는 테스트 데이터에 방지의 overfit 않는 경우 는 조정 매개 변수를 최적화
성급한 평형을

sampsize에서 complety 간과 된 조정 매개 변수를 찾았습니다. stackoverflow.com/questions/34997134/…
Soren Havelund Welling

답변:


30

임의 포리스트에서 과적 합을 피하기 위해서는 부트 스트랩 된 데이터에서 각 트리를 성장시키기 위해 임의로 선택된 기능 수를 제어하는 ​​조정 매개 변수를 최적화해야합니다. 일반적으로, 당신은을 통해이 작업을 수행 -fold 교차 검증, 여기서 , 그리고 최소화 샘플 예측 오차를 테스트하는 것이 튜닝 매개 변수를 선택합니다. 또한 더 큰 숲을 키우면 예측 정확도가 향상되지만 수백 그루의 나무에 도달하면 일반적으로 수익이 감소합니다.k { 5 , 10 }kk{5,10}


1
감사합니다. 이러한 매개 변수를 최적화하는 방법을 보여주는 자습서가 있습니까?
Abhi

Stanford 온라인 과정에 등록해야합니다.이 과정은 매우 간단하지만 다음은 R에서 수행하는 비디오 자습서입니다. class.stanford.edu/courses/HumanitiesScience/StatLearning/…
Brash Equilibrium

이것을 올바르게 이해하고 있다면 교차 검증을 사용하여 모델이 모든 단계에서 시도하는 기능의 수와 달리 임의 포리스트 모델로 들어가는 기능의 수를 확인합니다. 맞습니까?
Abhi

4
나는이 답변에 반박 할 것이다. RF의 매력적인 두 가지 특징은 RF를 과도하게 맞추기가 어렵고 기본 파라미터는 일반적으로 상당히 좋다는 것이다. 이 답변은 RF가 기본값에 민감하지 않다는 것을 암시하는 것 같습니다
charles

7
경험적으로, 나는 임의의 숲, 유도 된 임의의 숲, 정규화 된 임의의 숲 또는 안내 된 정규화 된 임의의 숲을 과도하게 맞추는 것이 전혀 어렵다는 것을 발견하지 못했다. 교차 검증에서 정기적으로 성능이 우수하지만 초과 데이터로 인해 새 데이터와 함께 사용하는 경우 성능이 저하됩니다. 나는 그것이 모델링되는 현상의 유형과 관련이 있다고 생각합니다. 기계적 프로세스를 모델링 할 때 큰 문제는 아니지만 행동 모델과 같은 것으로 잘 지정된 회귀로 훨씬 안정적인 결과를 얻습니다.
Hack-R

33

훈련 데이터에서 99 % AUC를 어떻게 얻습니까? 차이가 있음을 명심하십시오

predict(model)

predict(model, newdata=train)

훈련 데이터 세트에 대한 예측을 얻을 때. 첫 번째 옵션은 임의 포리스트에서 봉지 외부 예측을 가져옵니다. 훈련 데이터의 예측값과 실제 값을 비교할 때 일반적으로 원하는 것입니다.

두 번째는 훈련 데이터를 새로운 데이터 세트처럼 취급하고 각 트리에서 관측치를 실행합니다. RF 알고리즘은 일반적으로 개별 트리를 프룬 (prune)하지 않고 오 버핏을 제어하기 위해 트리의 앙상블에 의존하기 때문에 예측과 실제 간의 인위적인 밀접한 상관 관계가 발생합니다. 따라서 훈련 데이터에 대한 예측을 원한다면이 작업을 수행하지 마십시오.


3
predict (model, data = train)를 사용하고있었습니다. 나는 이제 예측 (모델)로 전환했으며 내 auc는 87 %로 떨어졌습니다. 이것이 좋은 것입니까 나쁜 것입니까?
Abhi

2
감사합니다! 나는 이것이 나에게도 문제라는 것을 알았다. RF 모델에 대한 '훈련 오류'로 사용할 측정 값에 대한 후속 질문을 여기에 게시했습니다. stats.stackexchange.com/questions/162353/…
Berk U.

감사합니다 !! 나도이 실수를하고 있었다! @Abhi에게 : 이전 AUC는 의미가 없었기 때문에 좋은 일입니다. 이것은 더 현실적입니다. 교차 검증을 시도하고 AUC를 측정하면 비슷한 값을 볼 수 있습니다.
호기심

7

의사 결정 트리에는 과적 합을 처리하는 두 가지 방법이 있습니다. (a) 나무를 완전히 자라지 마십시오 (b) 자두

나무 숲에도 동일하게 적용됩니다. 너무 많이 자라지 말고 자두하십시오.

randomForest많이 사용하지는 않지만 숲을 조정하는 데 사용할 수있는 몇 가지 매개 변수가 있습니다.

  • nodesize -최소 크기의 터미널 노드
  • maxnodes -최대 터미널 노드 수
  • mtry -각 트리를 만드는 데 사용되는 변수의 수 (@ user777 덕분에)

1
그리고 mtry, 알고리즘이 각 트리를 만들기 위해 그리는 변수의 수, 기본적으로 총 기능 수의 제곱근.
복원 Monica Monica

maxnodes를 그대로두고 sampsize를 낮추십시오. 감소하는 maxnodes와 sampsize는 모두 깊이가 적고보다 강력한 포리스트를 제공하고, sampsize는 더 낮은 트리 상관 관계를 제공하며, 포리스트는 교차 검증 된 예측 오류를 낮추기 위해 수렴 할 수 있습니다. stackoverflow.com/questions/34997134/…
Soren Havelund Welling

2

K 폴드 교차 검증과 같은 교차 검증 방법을 사용할 수 있습니다.


기능을 정규화 / 확장해야합니까?
찰스

4
@ 찰스 내 사과. 임의 포리스트를 사용할 때 기능을 확장 할 필요는 없습니다. 다음을 참조하십시오 : stackoverflow.com/questions/8961586/…
Fre

교차 유효성 검사가 유용 할 것이라고 생각합니다. 이것은 분할 샘플 검증으로 잠재적으로 불안정한 오차 추정치를 생성하는 비교적 작은 데이터 세트입니다 (물론 여기서 이것이 문제가되지 않는다는 것을 알 수 있습니다)
charles

1

gridsearch를 사용하여 매개 변수를 조정할 수 있습니다

from sklearn.ensemble import RandomForestClassifier

from sklearn.grid_search import GridSearchCV

random_classifier = RandomForestClassifier()

parameters = { 'max_features':np.arange(5,10),'n_estimators':[500],'min_samples_leaf': [10,50,100,200,500]}

random_grid = GridSearchCV(random_classifier, parameters, cv = 5)

시도 된 편집기는 모듈 GridSearchCV이 들어 있다고 제안하고 model_selection따라서 두 번째 코드 행이되어야합니다 from sklearn.model_selection import GridSearchCV.
gung-복원 Monica Monica

0

max_depth 매개 변수를 [5, 15] 범위에서 조정 하지만 이보다 크지 않은 깊이를 사용하면 과적 합의 가능성이 높아집니다.

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