본문 바로가기
Drawing (AI)/MachineLearning

Udemy - 머신러닝의 모든 것 (Random Forest Regression)

by 생각하는 이상훈 2023. 3. 18.
728x90

Random Forest

랜덤 포레스트는 앙상블 학습의 한 버전인데 앙상블 학습에는 그라데이션 부스팅 같은 다른 버전들도 있다. 앙상블 학습은 여러 알고리즘이나 같은 알고리즘을 여러개 조합하여 훨씬 더 강력한 알고리즘을 만드는 것을 의미한다. 이때 랜덤 포레스트는 여러 개의 의사 결정 트리를 결합한 앙상블 기법을 이용했다.

랜덤 포레스트를 단계별로 살펴보자.

 

STEP1: Training set에서 랜덤한 K 데이터 포인트들을 고른다.

 

STEP2: 고른 데이터들에 연관된 의사 결정 트리를 만든다.

 

STEP3: 몇개의 트리를 만들지 결정하고 STEP1,2를 반복하여 여러개의 트리를 만든다.

 

STEP4: 학습된 각각의 트리에서 결과를 받아서 예측 값을 도출한다. (적어도 500개정도의 트리, 즉 500개의 결과에서 최종 값을 도출해낸다.)

 

이러한 과정을 거치기 때문에 단순히 트리에서 결과를 찾는게 아니라 나무들의 모임 즉 숲에서 결과를 찾는다고 해서 Random Forest라는 이름이 붙었다. 추가적으로 최종 결과를 결정하는 과정을 투표과정이라고도 하는데 랜덤 포레스트의 투표 과정에서는 일반적으로 분류 문제에서는 다수결 투표 방식을 사용하고, 회귀 문제에서는 평균 예측값을 사용한다.

다수결 투표 방식은 각각의 의사 결정 트리에서 예측한 결과를 모아 다수결을 통해 최종 예측 결과를 결정하는 방식이다. 예를 들어, 10개의 트리가 만들어졌고, 그 중 7개의 트리가 어떤 클래스로 분류했다면, 그 클래스를 최종 예측 결과로 결정한다. 이 방식은 분류 문제에서 일반적으로 사용되며, 각 트리가 분류한 결과의 빈도수를 계산하면서 최종 예측 결과를 결정할 수 있다.

반면에 회귀 문제에서는 각각의 의사 결정 트리에서 예측한 결과값의 평균을 최종 예측값으로 사용한다. 예를 들어, 10개의 트리를 만들었고, 각각의 트리에서는 입력 데이터의 값을 예측한 결과값을 모았다면, 이들 값의 평균을 최종 예측값으로 사용한다. 이 방식은 회귀 문제에서 일반적으로 사용되며, 각 트리가 예측한 결과값의 평균을 계산하여 최종 예측값을 결정할 수 있다.


Random Forest Regression Model

이전에 다룬 의사 결정 트리 모델과 아주 사소한 차이가 있다. 해당 지점만 집중해면 간단한 모델이다.

#Random Forest Regression
#Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

#Importing the dataset
dataset = pd.read_csv('Position_Salaries.csv')
X = dataset.iloc[:, 1:-1].values
y = dataset.iloc[:, -1].values

#Training the Random Forest Regression model on the whole dataset
from sklearn.ensemble import RandomForestRegressor
#나무의 수를 n_estimators인자로 결정해줌
regressor = RandomForestRegressor(n_estimators = 10, random_state = 0)
regressor.fit(X, y)

#Predicting a new result
regressor.predict([[6.5]])
array([167000.])

이전 모델과 달리 회귀 모델 훈련하는 함수 RandomForestRegressor에서 n_estimators라는 인자가 새로 생겼다. n_estimators를 통해 생성할 트리수를 결정해서 숲을 만들어주면된다.

#Visualising the Random Forest Regression results (higher resolution)
X_grid = np.arange(min(X), max(X), 0.01)
X_grid = X_grid.reshape((len(X_grid), 1))
plt.scatter(X, y, color = 'red')
plt.plot(X_grid, regressor.predict(X_grid), color = 'blue')
plt.title('Truth or Bluff (Random Forest Regression)')
plt.xlabel('Position level')
plt.ylabel('Salary')
plt.show()


728x90