이번 포스팅에서는 파이썬에서 대표적인 머신러닝 분류기 중 하나인 랜덤 포레스트를 사이킷런에서 사용하는 방법에 대해서 살펴보도록 하겠습니다.
Sklearn(사이킷런) 랜덤 포레스트 분류기
kaggle의 타이타닉 데이터셋을 대상으로 사용 예시를 보여드리도록 하겠습니다.
우선 다음 코드처럼 모듈을 임포트 한 뒤, train / test 데이터셋을 분리하도록 하겠습니다.
train feature는 Pclass, SibSp, 성별을 사용하는 것으로 가정하겠습니다.
단, 이 모듈에서는 'male', 'female' 등의 텍스트를 feature로 인식할 수 없으므로, one-hot 인코딩을 진행해주도록 하겠습니다.(남성인지 아닌지를 1/0 혹은 True/False로 표현)
이제 위에서 정한 train feature를 기반으로 생존여부를 예측하는 간단한 모델을 작성해보도록 하겠습니다.
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
df['is_male'] = (df['Sex'] == 'male') # 성별 column one-hot 인코딩
train_columns = ['Pclass', 'SibSp', 'is_male'] # train_feature를 나타내는 column
# train, test 데이터셋 분리(random state 지정시 항상 고정, test set 비율도 지정 가능)
X_train, X_test, y_train, y_test = train_test_split(df[train_columns], df['Survived'],
test_size = 0.25, random_state = 32)
이제 Train, Test 데이터 셋(X_train, X_test) 및 각 데이터 셋에 매칭되는 생존 여부 라벨(y_train, y_test) 분리가 완료되었습니다.
Sklearn(사이킷런) 랜덤 포레스트 모델 학습
위에서 전처리가 완료되었으면 이제 랜덤 포레스트 모델을 선언하고 학습을 진행할 차례입니다.
먼저, 모델의 구조를 선언하도록 하겠습니다.
model = RandomForestClassifier(n_estimators=5, random_state=0)
모델 구조 선언시 하이퍼파라미터를 지정할 수 있습니다. 이는 맨 뒷 부분에서 추가로 다루도록 하겠습니다.
이제 train 데이터셋 및 라벨을 가지고 모델을 학습하도록 하겠습니다. 코드는 매우 간단합니다.
model.fit(X_train, y_train)
마지막으로 학습된 모델을 바탕으로 test 데이터셋의 라벨을 예측하고 실제 라벨과 정확도를 비교해보겠습니다.
from sklearn.metrics import accuracy_score
# test 데이터셋에 대해서 라벨 예측(0, 1로 이루어진 array)
y_pred = model.predict(X_test)
# 예측 결과와 실제 결과 사이의 정확도 반환
accuracy_score(y_pred, y_test)
여기서는 약 76% 정도의 정확도가 기록된 것을 확인할 수 있었습니다.
Sklearn(사이킷런) 랜덤 포레스트 하이퍼파라미터
모델의 구조 선언 단계에서 랜덤 포레스트의 세부 구조를 정하여 여러 실험을 진행할 수 있습니다.
많이 사용하는 대표적인 하이퍼파라미터의 리스트는 다음과 같으며, 더 자세한 내용은 공식 document를 참조해주시기를 바랍니다.
n_estimator : forest size, 의사결정나무의 개수, 클수록 성능은 좋아질 수 있지만 시간이 오래 걸림
criterion : 'gini', 'entropy' 중 선택 가능, 기본 값은 'gini'이며, 의사 결정 나무를 학습하는 과정에서 기준 선정
max_depth : 과적합을 방지하기 위하여 의사결정나무의 depth 최대 값을 제한
min_samples_split : split을 끝낼 node의 sample 최소 갯수 선정, 클수록 과적합이 방지되지만, 너무 크면 split이 제대로 되지 않을 수 있음
min_samples_leaf : leaf node의 최소 sample 개수를 의미
n_jobs : -1로 설정시 컴퓨팅 프로세서 최대한 활용
random_state : 임의의 정수로 설정시 실행시마다 결과가 바뀌지 않고 고정됨
'Python > Sklearn' 카테고리의 다른 글
[Sklearn] 파이썬 k-NN 알고리즘(k-최근접 이웃) 예제 (0) | 2021.11.29 |
---|---|
[Sklearn] 파이썬으로 선형 회귀 분석하기 예제 (Linear Regression) (0) | 2021.11.23 |
[Sklearn] 파이썬 서포트 벡터 머신 분류기(SVM) - SVC 함수 사용법 (2) | 2021.11.22 |