[ML/DL] 랜덤포레스트(Random Forest) & 앙상블(Ensemble)

2022. 1. 23. 12:11·Minding's Programming/Knowledge
728x90
반응형

오늘은 랜덤포레스트에 대해 알아보고자 한다.

랜덤포레스트는 기본적으로 앙상블 모델이기 때문에, 앙상블 기법과 간단한 개념도 복습하였다.

 


랜덤포레스트(Random Forest)

출처 : 위키백과
출처 : 아무튼 워라밸 [랜덤 포레스트(Random Forest) 쉽게 이해하기]

  • 여러 결정트리로부터 분류 결과를 집계하여 결론을 내리는 기법
  • 결정트리의 오버피팅을 막을 수 있는 전략

 

랜덤포레스트 프로세스

  • 트리 생성에 무작위성 투입하여 결정트리를 많이 만듦
  • 각 트리가 고유하게 만들어지도록 무작위 선택 (Bootstrap Sample)
  • 기존 트리와 달리 무작위로 선택 후 후보들 중 최선의 테스트 도출

 

Bagging Features

  • 결정트리를 만들 때 속성 선택에 있어 제한을 두어 다양성을 줌
  • 일반적으로 특성(칼럼) 개수의 제곱근을 임의적으로 선택하는 특성 개수로 활용
    • (ex. 25개의 칼럼이 있다면 5개의 칼럼 선택)
  • 5개의 특성 중 정보 획득(information gain)이 가장 높은 것을 기준으로 데이터를 분할

랜덤포레스트 실습 (iris data 이용)

import pandas as pd
import numpy as np
import seaborn as sns

from sklearn.datasets import load_iris

iris = load_iris()

# X_data(특성값, 독립변수)와 y_data(결과값, 종속변수) 선언
X = iris.data
y = iris.target

# dataframe으로 살펴보기
df= pd.DataFrame(X, columns = iris.feature_names)
df.head()

 

# 훈련 / 테스트 데이터셋 나누기
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) # 70% training and 30% test


# 랜덤포레스트 모델 피팅
from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier(n_estimators=100) # n_estimators : 생성할 결정트리의 개수
clf.fit(X_train, y_train)


# 테스트데이터셋 결과값 예측 및 정확도 출력
y_pred = clf.predict(X_test)

from sklearn import metrics

print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
>>>
Accuracy: 0.9555555555555556

 

# 특성 중요도
feature_imp = pd.Series(clf.feature_importances_, index=iris.feature_names).sort_values(ascending=False)

feature_imp
>>>
petal width (cm)     0.459676
petal length (cm)    0.454799
sepal length (cm)    0.062654
sepal width (cm)     0.022870
dtype: float64
# 특성 중요도 시각화
import matplotlib.pyplot as plt
%matplotlib inline

sns.barplot(x=feature_imp, y=feature_imp.index)

plt.xlabel('Feature Importance Score')
plt.ylabel('Features')
plt.title("Visualizing Important Features")
plt.show()


(참고)

 

앙상블 (Ensemble)

  • 여러 머신러닝 모델을 연결하여 더 강력한 모델을 만드는 기법

 

앙상블 기법

 

부스팅 (Boosting)

출처 : https://www.geeksforgeeks.org/xgboost/

  • 연속적으로 약한 모델을 결합시켜 학습시키는 방법
  • 직전 모델이 잘못 분류한 에러를 반영해 다음 모델을 학습시키는 것을 반복
  • ex) AdaBoost, XGBoost, GBM, LightGBM 등

 

스태킹 (Stacking)

출처 : https://www.geeksforgeeks.org/stacking-in-machine-learning/

  • 개별 모델이 예측한 데이터를 다시 meta data set으로 사용해서 학습
  • Cross Validation을 통해 교차 검증
  • 특정 형태의 샘플에서 어떤 종류의 단일 모델이 어떤 결과를 가지는지 학습가능

 

배깅 (Bagging)

출처 : https://www.geeksforgeeks.org/xgboost/

  • 기존 훈련 데이터에서 샘플을 임의로 n개 뽑아 모델을 학습시키고, 그 결과를 집계하는 방법
    • 부트스트랩 (bootstrap) : random sampling을 적용하는 방법을 일컫는 말, 무작위로 모집단을 구성하는 방법
  • 중복 허용
  • 각 결정트리는 모두 다른 데이터셋으로 학습하지만, 원래 훈련데이터의 부분집합으로 학습됨
  • 범주형 데이터(categorical data)는 투표로 집계하고, 연속형 데이터(continuous data)는 평균으로 집계
  • ex) 랜덤포레스트

References

https://eunsukimme.github.io/ml/2019/11/26/Random-Forest/

 

Random Forest(랜덤 포레스트) 개념 정리

Decision Tree는 overfitting될 가능성이 높다는 약점을 가지고 있습니다. 가지치기를 통해 트리의 최대 높이를 설정해 줄 수 있지만 이로써는 overfitting을 충분히 해결할 수 없습니다. 그러므로 좀더 일

eunsukimme.github.io

https://hleecaster.com/ml-random-forest-concept/

 

랜덤 포레스트(Random Forest) 쉽게 이해하기 - 아무튼 워라밸

본 포스팅에서는 의사결정 트리의 오버피팅 한계를 극복하기 위한 전략으로 랜덤 포레스트(Random Forest)라는 방법을 아주 쉽고 간단하게 설명하고자 한다. 파이썬 머신러닝 라이브러리 scikit-learn

hleecaster.com

https://data-matzip.tistory.com/4

 

1. 앙상블(Ensemble) 기법과 배깅(Bagging), 부스팅(Boosting), 스태킹(Stacking)

안녕하세요, 허브솔트에요. 저희 데이터맛집의 허브솔트 첫 글 주제로 앙상블이 당첨됐네요...! 요새 캐글의 상위권 메달을 휩쓸고 있는 대세 알고리즘이 앙상블 기법을 사용한 알고리즘의 한

data-matzip.tistory.com

https://www.geeksforgeeks.org/

 

GeeksforGeeks | A computer science portal for geeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

728x90

'Minding's Programming > Knowledge' 카테고리의 다른 글

[ChatGPT] ChatGPT에게 여행일정을 짜달라고 해보았다.  (0) 2023.02.05
[ML / DL] KNN (K-Nearest-Neighbor, K-최근접 이웃)  (0) 2022.01.25
[ML / DL] 의사결정나무 (Decision Tree)  (0) 2022.01.20
[ML/DL] 로지스틱 회귀 (Logistic Regression)  (0) 2022.01.19
[ML/DL] 선형회귀 (Linear Regression)  (0) 2022.01.18
'Minding's Programming/Knowledge' 카테고리의 다른 글
  • [ChatGPT] ChatGPT에게 여행일정을 짜달라고 해보았다.
  • [ML / DL] KNN (K-Nearest-Neighbor, K-최근접 이웃)
  • [ML / DL] 의사결정나무 (Decision Tree)
  • [ML/DL] 로지스틱 회귀 (Logistic Regression)
Minding
Minding
  • Minding
    Today's Minding
    Minding
  • 전체
    오늘
    어제
    • 울고넘는 딥러닝 (278)
      • Minding's Baseball (57)
        • MLB Statcast (29)
        • 머신러닝으로 홈런왕 예측하기 (3)
        • 야구칼럼 (12)
        • 야구 규칙, 용어 (1)
        • 2022-23 질롱 코리아 (8)
        • 류현진 등판경기 (4)
      • Minding's Programming (185)
        • 프로그래머스 코딩테스트 (21)
        • Knowledge (44)
        • Numpy & Pandas (6)
        • Excel (3)
        • Git (1)
        • Pygame (11)
        • CV (3)
        • Tensorflow tutorial (4)
        • Kaggle and Dacon (4)
        • 에러 코드 (8)
        • FastAPI (8)
        • Airflow (29)
        • Crawling (6)
        • Django (14)
        • AWS (18)
        • Spark (5)
      • Minding's Reading (30)
        • 머신러닝 딥러닝에 필요한 기초 수학 with 파이.. (2)
        • 칼만필터는 어렵지 않아 (11)
        • 밑바닥부터 시작하는 딥러닝 (6)
        • 메이저리그 야구 통계학 2e (8)
        • 논문읽기 (2)
        • 빅데이터를 지탱하는 기술 (1)
      • Minding's Life (5)
        • 주식 (4)
        • 각종 소식 (1)
  • 블로그 메뉴

    • 홈
    • Baseball
    • Programming
    • Reading
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    KBO
    데이터분석
    MLB
    넘파이
    django
    칼만필터는어렵지않아파이썬
    칼만필터는어렵지않아
    칼만필터
    메이저리그
    파이썬
    칼만필터는어렵지않아python
    데이터 엔지니어
    KalmanFilter
    머신러닝
    코딩테스트
    django python
    에어플로우
    파이썬게임개발
    딥러닝
    Python
    게임개발
    Airflow
    질롱코리아
    pygame
    야구
    FastAPI
    AWS
    mlb stats api
    파이게임
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minding
[ML/DL] 랜덤포레스트(Random Forest) & 앙상블(Ensemble)
상단으로

티스토리툴바