본문 바로가기
머신러닝

[머신러닝] Random Forest 랜덤 포레스트 모델 개념 제대로 이해하기

by 데싸루나 2023. 2. 27.

머신러닝 Supervised Learning 모델 중 전반적으로 높은 성능을 가져 인기가 많은 랜덤포레스트(Random Forest) 모델에 대해 알아보겠습니다. 랜덤 포레스트란 어떤 모델인지, 어떻게 동작하는지, 어떤 장단점을 가지고 있는지, 사이킷런(Scikit-learn)으로 머신러닝 해보는 코드 예제를 함께 보겠습니다.

 

Random Forest(랜덤 포레스트) 모델 개념 제대로 이해하기
머신러닝 랜덤포레스트 제대로 이해하기

 

랜덤포레스트를 이해하기 전에 먼저 알아야 할 개념 : Decision Tree

랜덤포레스트(Random Forest) 모델을 제대로 알기 위해서는 Decision Tree(의사결정트리) 모델을 먼저 이해해야 합니다. 아래 포스팅을 참고해 주세요.

 

 

Classification Decision Tree (결정트리) 개념 - Information gain, impurity, Entropy 이해

Decision Tree(결정트리)는 Classification을 하기 위해 트리를 그려 마지막 leaf node에서 class가 구분되도록 하는 모델이다. Classification이 어떤 방식에 의해 결정이 됐는지 확인하기가 직관적이고 시각화

datasciencediary.tistory.com

 

 

머신러닝 Decision Tree 핵심 개념 (데이터 사이언티스트 면접 질문)

이번 포스팅에서는 머신러닝 Classification 모델 중 Decision Tree(의사결정트리)와 관련된 데이터사이언티스트 단골 면접(인터뷰) 질문 및 꼭 알고 넘어가야 하는 핵심 개념들에 대해 정리해 보겠습니

datasciencediary.tistory.com

 

 

Decision Tree(의사 결정 트리)의 단점/문제점

오버피팅(Overfitting): Decision Tree(의사 결정 트리)는 오버피팅(Overfitting)이 발생하기 쉽고, Outlier나 노이즈에 예민하여 중요하지 않은 데이터 패턴을 포착할 수 있습니다. 이로 인해 새로운 데이터에 대한 Generalization(일반화) 성능이 저하될 수 있습니다.

불안정성: Decision Tree(의사 결정 트리)는 데이터의 작은 변화에 민감할 수 있으며, 매우 유사한 데이터 세트에 대해 서로 다른 트리가 생성될 수 있습니다.

편향성: Decision Tree(의사 결정 트리)는 레벨이 많은 속성(feature)에 편향될 수 있으며, 레벨이 적은 속성(feature)은 자주 선택되지 않을 수 있습니다. (여기서 레벨이 많은 feature라는 것은 예를 들어 '도시'라는 속성이 있을 경우 매우 많은 선택지를 가지는 것과 같음, 레벨이 적은 feature은 Gender 같은 경우 남/녀 두 가지의 레벨을 가짐)

Linear relationship(선형 관계)를 포착하지 못함: Decision Tree(의사 결정 트리)는 Recursive Binary Splitting(반복적인 이진 분할)을 기반으로 하기 때문에 데이터의 Linear relationship(선형 관계)를 포착하는 데 적합하지 않습니다.

Missing Data(누락된 데이터) 처리의 어려움: Decision Tree(의사 결정 트리)는 일반적으로 분할을 수행하기 위해 완전한 데이터가 필요하기 때문에 누락된 데이터를 잘 처리하지 못할 수 있습니다. (Missing Value를 가지는 속성(feature)은 트리에서 누락됨으로써 중요한 데이터 패턴을 놓치게 될 수도 있음 -> 사전 데이터 클렌징이 중요한 이유)

Multi-class Classification(다중 클래스 분류)의 어려움: Decision Tree(의사 결정 트리)는 Multi-class Classification 문제를 다루는 데는 적합하지 않습니다. 트리가 매우 복잡해지고 해석하기 어려워지기 때문입니다.

 

랜덤포레스트를 이해하기 전에 먼저 알아야 할 개념 : Bagging(배깅)

랜덤포레스트(Random Forest) 모델을 제대로 이해하기 위해서는 Decision Tree(의사결정트리)와 더불어 Bagging(배깅)과 Ensemble이 무엇인지도 이해해야 합니다. 아래 포스팅을 참고해 주세요.

 

 

머신러닝 Ensemble method, Bagging (배깅), 성능 향상 방법

머신러닝에서 모델의 성능을 향상시키는 방법에는 여러가지 방법이 있습니다. 그중 Ensemble 방법은 가장 흔히 사용되는 방식 중 하나입니다. Ensemble method란 무엇인지, 그리고 그 중 Bagging(배깅)이

datasciencediary.tistory.com

 

 

Random Forest(랜덤 포레스트 모델)이란?

 

Random Forest(랜덤 포레스트) 모델 구조
Random Forest(랜덤 포레스트) 모델 구조

 

랜덤 포레스트(Random Forest)는 Classification과 Regression 작업에 모두 사용되는 인기 있는 머신 러닝 알고리즘입니다. Decision Tree(의사 결정 트리)의 일부 한계를 개선한 Decision Tree(의사 결정 트리)에 Ensemble 메소드로 결합한 모델입니다. 랜덤 포레스트(Random Forest)는 여러 개의 Decision Tree(의사 결정 트리)를 구축한 다음 각각의 개별 트리가 예측한 값을 모아서 다수결로 투표(Vote)한 다음 최종 Prediction(예측)을 합니다. 랜덤 포레스트(Random Forest)의 각 Decision Tree(의사 결정 트리)는 데이터의 서로 다른 Bootstrap(부트스트랩) 샘플에 대해 학습되며, Split 할 때마다 데이터 속성(Feature)중 무작위 Subset을 추출해서 트리를 만듭니다. 이런 방식의 랜덤포레스트(Random Forest) 모델은 Decision Tree(의사 결정 트리)에서 발생할 수 있는 Overfitting 문제를 줄이는 데 도움이 됩니다. 또한 각 Split을 할 때 무작위 데이터 속성(Feature) Subset을 사용하면서 트리의 모양을 다양하게 만들어서 동일한 Prediction(예측)을 얻을 가능성을 줄일 수 있습니다.

 

랜덤포레스트 - Random Forest
랜덤포레스트 - Random Forest

 

 

랜덤 포레스트(Random Forest) 알고리즘이 동작하는 과정

1. 데이터를 여러 개의 데이터 set으로 Bagging(Bootstrap) 합니다. 

2. 여러 개의 트리를 만들고 각 트리는 Train 하는 데 사용할 데이터를 Bootstrap 된 데이터 중에서 무작위로 선택합니다.

2. 트리가 Split 할 때 고려할 속성(feature)의 Subset을 무작위로 선택합니다.

3. 각 트리는 이렇게 Bootstrap 된 데이터와 거기서 또 무작위로 선택한 속성(feature)들만 가지고 Decision Tree(의사 결정 트리)를 만듭니다.

4. 모든 트리에 대해 1~3단계를 거칩니다.

5. 새로운 데이터 인스턴스(Test set)에 대한 Prediction(예측)을 수행하기 위해 Test set을 모든 트리에 전달하고 각 트리의 Prediction(예측)을 집계합니다.

 

랜덤포레스트(Random Forest)의 장점 단점

랜덤포레스트(Random Forest)는 다음과 같은 장단점을 가집니다.

장점

1. High Accuracy : 랜덤포레스트는 Ensemble Method 중 하나이기 때문에 전반적으로 높은 Accuracy를 가질 수 있습니다. 이는 지난번 배깅(Bagging)에서 살펴봤던 것과 같이 Ensemble 한다는 것은 여러 개가 힘을 합쳐서 문제를 같이 푸는 것과 같으므로 각자 푼 정답을 다수결로 모아봄으로써 더 높은 정답률을 가지는 것에 비유해 볼 수 있습니다. 

2. Overfitting 방지 : 단일 Decision Tree가 가지던 Overfitting 문제를 완화할 수 있습니다. 이는 데이터를 Bootstrapping 하고 또 각 트리는 데이터의 속성을 랜덤 하게 추출하면서 자연스럽게 노이즈나 Outlier가 모델에 미치는 영향을 감소시키는 효과를 가집니다.

 

단점

1. High Computational cost : 랜덤포레스트는 트리의 개수를 너무 많게 설정하고, 데이터가 너무 방대하면 모델을 학습시키는 데 너무 많은 시간이 걸릴 수 있습니다. 

2. Black Box Model : 랜덤포레스트 모델은 여러 개의 Decision Tree가 모여 만든 모델로 어떻게 예측을 수행하는지 한눈에 직관적으로 알아보고 모델을 해석하는 데 어려움을 겪을 수 있습니다. 

 

 

사이킷런(Scikit-learn)으로 머신러닝 랜덤포레스트(Random Forest) 모델과 Decision Tree(의사결정트리) 모델 만들어 퍼포먼스 비교해 보는 코드 예시

아래 코드는 파이썬 머신러닝 패키지인 사이킷런(Scikit-learn)을 이용하여 사이킷런에서 제공하는 Breast Cancer(유방암) 데이터를 활용하여 Decision Tree와 Random Forest(랜덤 포레스트) 모델 두 개를 만들어 보고, 예측을 수행해 봤을 때 어떤 모델이 더 높은 Accuracy를 가지는 지 비교해 보는 코드 예제입니다. 결과에서 볼 수 있듯이, Random Forest(랜덤 포레스트) 모델이 조금 더 높은 Accuracy를 가지는 것을 확인해 볼 수 있습니다. 

from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split

# Load the breast cancer dataset
data = load_breast_cancer()

# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=42)

# Train a decision tree classifier on the training data
dt = DecisionTreeClassifier(random_state=42)
dt.fit(X_train, y_train)

# Train a random forest classifier on the training data
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)

# Evaluate the accuracy of the decision tree classifier on the testing data
dt_accuracy = dt.score(X_test, y_test)
print("Decision tree accuracy:", dt_accuracy)

# Evaluate the accuracy of the random forest classifier on the testing data
rf_accuracy = rf.score(X_test, y_test)
print("Random forest accuracy:", rf_accuracy)

decision tree and random forest accuracy
decision tree and random forest accuracy

 

 

 

<참고하면 좋을 포스팅>

 

 

머신러닝 ROC curve(커브), AUC 개념 제대로 이해하기

머신러닝 Classification 모델에 있어서 ROC 커브와 AUC는 몰라서는 안되는 정말 중요한 개념입니다. 이를 이해하는 데 있어 필수적으로 같이 알아야하는 Threshold, Sensitivity, Specificity 그리고 Youden Index

datasciencediary.tistory.com

 

 

불균형 데이터(Imbalanced Data) 머신러닝 Classification 문제점 해결방법

머신러닝 Classification을 할 때 흔히 접하는 문제는 데이터가 불균형하게 형성되어 있는 것입니다. 우리가 관심가지는 데이터를 현실적으로 충분하게 얻을 수 없을 때 발생합니다. 불균형 데이터(

datasciencediary.tistory.com

 

 

머신러닝 Feature Selection 개념, 중요성, 하는 방법

머신러닝 프로세스 중 Feature Selection 과정은 퍼포먼스를 높이기 위해 반드시 필요한 과정입니다. 이 포스팅에서는 Feature Selection이란 무엇인지 이해하고, Feature Selection이 필요한 이유와 Feature Selec

datasciencediary.tistory.com

 

댓글