[Kaggle][Learn] Intro to Machine Learning - (6) Random Forests

켈로그·2023년 12월 9일
0

Kaggle

목록 보기
8/11

더 정교한 머신러닝 알고리즘을 사용해보자.

Introduction

Decision Tree는 우리가 힘든 결정을 하도록 한다.

잎이 많은 깊은 나무는 너무 적은 수의 집의 과거 데이터에서 나오기 때문에 overfitting의 위험이 있다.

잎이 거의 없는 얕은 나무는 원본 데이터와의 많은 구분점을 잡아내지 못하므로 underfitting 되어 성능이 낮아질 수도 있다.

최근의 가장 정교한 모델링 기술조차도 underfitting과 overfitting 사이에서 이런 고민을 하게 하는데,
그럼에도 더 나은 성능을 하게 할 수 있는 기발한 아이디어를 가진 여러 모델들이 있다.

이번엔 그 예로 Random Forest를 살펴보자.


Random Forest 모델은 많은 트리를 사용하여,
나무의 구성 요소가 되는 각 구성 트리들의 예측값의 평균값을 모델의 예측값으로 사용한다.

일반적으로,
단일 Decision tree 모델보다 예측 정확도가 훨씬 높은데다,
파라미터의 기본 설정값으로도 잘 돌아간다.

모델링을 계속하다보면 더 나은 성능을 갖는 많은 모델들을 배울 수 있지만, 대다수는 적절한 파라미터값을 얻는 것이 매우 중요하다.



Example

이전까지의 과정에서 한 데이터 불러오고 처리하는 과정 :

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)

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

train_X, val_X, train_y, val_y = train_test_split(X, y,random_state = 0)




랜덤 포레스트 모델도 scikit-learn에서 decision tree를 가져와 모델을 만든 것과 비슷하다.

이번엔 DecisionTreeRegressor 대신, DecisionTreeRegressor을 사용한다.

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))

[결과] 191669.7536453626

결론

추가적인 개선을 더 해야할 것 같긴 하지만,
이는 decision tree에서 가장 최선이었던 MAE값 25만에 비해 크게 개선된 값이다.

단일 Decision Tree의 최대 깊이를 바꾼 것처럼,
Random Forest의 성능을 바꿀 수 있는 파라미터들이 있다.

하지만 Random Forest의 가장 큰 특징 중 하나는, 이런 파라미터 조정 없이도 일반적으로 잘 작동한다는 것이다.

profile
호랑이기운

0개의 댓글