티스토리 뷰

카테고리 없음

랜덤 포레스트 이론

루돌푸다요 2024. 3. 29. 18:06

의사결정 나무는 과적합과 불안정성 대한 문제가 대두 되었어요. 이를 해결하기 위한 아이디어는 바로 

나무(Tree) 를 여러 개 만들어 숲(Forest)를 만드는 것이에요. 

 

배깅(Bagging)의 원리 

  • 언제나 머신러닝은 데이터의 부족이 문제 
  • 이를 해결 하기 위한 Bootstrapping + Aggregationg 방법론 
    - Bootstrapping : 데이터를 복원 추출해서 유사하지만 다른 데이터 집단을 생성하는 것 
    - Aggregationg : 데이터의 예측, 분류 결과를 합치는 것 
    - Ensemble(앙상블) : 여러 개의 모델을 만들어 결과를 합치는 것 

더보기

 

Bootstrap은 " 자기 스스로 해낸다" 의 뜻의 유래를 가지고 있으면서, 영단어로는 부츠 신발 끈을 의미해요. 

이를 차용하여 데이터를 복원추출한다는 것을 뜻하며, 이렇게 생성한 데이터 샘플들은 모집단의 분포를 유사하게 따라가고 있으니 다양성을 보장하면서 데이터의 부족한 이슈를 해결하게 되었어요 

Tree 를 Forest로 만들기 

여러 개의 데이터 샘플에서 각자 의사결정트리를 만들어서 다수결 법칙에 따라 결론을 냄 

Ex ) 1 번 승객에 대해서 모델 2개는 생존, 모델 1개는 사망을 분류하였다면, 1번 승객은 최종적으로 생존으로 분류

 

  • 이로써 의사결정 모델이 훈련 데이터에 민감한 점을 극복 
더보기

의사결정나무의 장점은 수용하고 단점은 보완했기 때문에, 랜덤 포레스트는 일반적으로 굉장히 뛰어난

성능을 보여서 지금도 자주 쓰이는 알고리즘 이랍니다. 

  • 랜덤 포레스트 정리 
    장점 : Bagging 과정을 통해 과적합을 피할 수 있다, 이상치에 견고하며 데이터 스케일링이 불 필요 
              변수 중요도를 추출하여 모델 해석에 중요한 특징을 파악 할 수 있다.
  • 단점 : 컴퓨터 리소스 비용이 크다. 앙상블 적용으로 해석이 어렵다.  

로지스틱 회귀, 의사결정나무, 랜덤포레스트 

from sklearn.linear_model import LogisticRegreesion
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score,f1_Score

model_lor = LogisticRegression()
model_dt = DecisionTreddClassifier(random_state=42)
model_rf = RandomForestClassifier(random_state=42)

model_lor.fit(X.y)
model_dt.fit(X.y)
model_rf.fit(X.y)

y_lor_pred = model_lor.predict(X)
y_dt_pred = model_dt.predict(X)
y_rf_pred = model_dt.predict(X)

def get_score(model_name, y_true, y_pred):
	acc =accuracy_score(y_true, y_pred).round(2)
    f1 =f1_score(y_true,y_pred).round(2)
    print(model_name, 'acc 스코어는: ', acc, 'f1_Score는', f1)
   
get_score('lor', y,y_lor_pred)
get_score('dt',y,y_dt_pred)
get_score('rf',y,y_rf_pred)