Intro to Machine Learning - 06. Random Forests

d2n0s4ur·2023년 2월 3일
0

📖 Tutorial

Introduction

의사 결정 트리는 여러분께 어려운 결정을 남깁니다. 이파리가 많은 깊은 트리에서는 각각의 예측값이 이파리에 있는 적은 수의 주택 데이터로부터 나오기 때문에 과적합이 발생합니다. 반대로 잎이 거의 없는 얕은 트리의 경우에는 기존 데이터에서 패턴을 포착하기 어렵기 때문에 과소적합이 발생하고, 성능이 저하됩니다.

오늘날 가장 정교한 모델링 기술에도 과적합과 과소적합을 피하기는 어렵습니다. 그러나 많은 모델이 더 나은 성능으로 이어질 수 있는 기발한 아이디어를 가지고 있습니다. Random Forest를 예로 들어 보겠습니다.

Random Forest는 많은 트리를 사용하며, 각 성분 트리 예측을 평균화하여 계산합니다. 일반적으로 단일 의사 결정 트리보다 예측 정확도가 훨씬 뛰어나며, 기본 매개 변수와 잘 작동합니다. 모델링을 계속하면 더 많은 모델을 학습하여 성능을 향상시킬 수 있지만 대부분의 모델은 올바른 매개 변수를 지정하는데 어려움을 겪습니다.

Example

여러분은 이미 데이터를 로드하는 코드를 여러번 살펴봤습니다. 이 코드의 실행 결과, 다음과 같은 변수를 얻을 수 있습니다:

  • train_X
  • train_y
  • val_X
  • val_y
import pandas as pd
    
# 데이터 읽기
melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path) 
# 결측값이 있는 행 제거
melbourne_data = melbourne_data.dropna(axis=0)
# 타겟과 feature 설정
y = melbourne_data.Price
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'BuildingArea', 
                        'YearBuilt', 'Lattitude', 'Longtitude']
X = melbourne_data[melbourne_features]

from sklearn.model_selection import train_test_split

# 타겟과 feature에 대하여, 훈련 / 검증데이터를 나눔
# 이 분류는 RNG(Random Number Generator)에 기반함
# random_state 변수를 제공하면 항상 같은 결과를 만들 수 있음
# 아래 코드를 실행
train_X, val_X, train_y, val_y = train_test_split(X, y,random_state = 0)

Scikit-learn 라이브러리에서 의사결정 트리를 구축한 것 처럼 Random Forest를 쉽게 구축할 수 있습니다. DecisionTreeRegressor class 대신 RandomForestRegressor class를 사용합니다.

from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error

forest_model = RandomForestRegressor(random_state=1)
forest_model.fit(train_X, train_y)
melb_preds = forest_model.predict(val_X)
print(mean_absolute_error(val_y, melb_preds))

Conclusion

추가적인 개선의 여지가 있지만, 기존 의사 결정 트리의 MAE인 250,000보다는 훨씬 개선된 수치입니다. 단일 의사 결정 트리의 최대 깊이를 지정했던 것 처럼 Random Forest에서도 성능을 변경할 수 있는 파라미터가 존재합니다. 그러나 랜덤 포레스트 모델의 가장 좋은 특징 중 하나는 이러한 조정 없이도 일반적으로도 합리적으로 작동한다는 것입니다.

Your Turn

랜덤 포레스트 모델을 직접 사용하여 모델이 얼마나 더 향상되는지 확인해보세요.

0개의 댓글