[파이썬 머신러닝] 랜덤포레스트 실습 및 정리

이현지·2024년 11월 16일

파이썬

목록 보기
19/21

1. 데이터 읽기 및 준비

import pandas as pd
import os
os.chdir(r'C:/Users/~~~')

train_df = pd.read_csv('activity_train.csv')
test_df = pd.read_csv('activity_test.csv')
X_train = train_df.iloc[:, :-2]
y_train = train_df.iloc[:, -1]
X_test = test_df.iloc[:, :-2]
y_test = test_df.iloc[:, -1]

train_df와 test_df는 각각 학습용 데이터와 테스트용 데이터를 읽어와 DataFrame으로 저장

특성(X)와 레이블(y):
X_train, X_test: 훈련 및 테스트 데이터에서 모든 특성 피처를 선택

iloc[:, :-2]는 데이터프레임에서 마지막 두 열을 제외한 모든 피처(입력값)를 선택하는 코드

y_train, y_test: 마지막 열이 Activity이므로, 이 열을 레이블(목표값)으로 지정

2. 랜덤 포레스트 분류기 학습 및 예측

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
import warnings
warnings.filterwarnings('ignore')

랜덤 포레스트 학습 및 별도의 테스트 셋으로 예측 성능 평가

rf_clf = RandomForestClassifier(random_state=0)
rf_clf.fit(X_train, y_train)
pred = rf_clf.predict(X_test)
accuracy = accuracy_score(y_test, pred)
print('랜덤 포레스트 정확도: {0:.4f}'.format(accuracy))

랜덤 포레스트 분류기 생성

RandomForestClassifier(random_state=0)
랜덤 포레스트 분류기를 생성

random_state=0
랜덤성의 재현을 위해 시드 값을 고정
(같은 데이터를 사용할 때 일관된 결과를 얻기 위한 것)

모델 학습

rf_clf.fit(X_train, y_train)
학습 데이터를 사용하여 랜덤 포레스트 모델을 학습
(모델은 각 데이터 포인트의 특성과 레이블 간의 관계를 학습)

예측 및 정확도 평가

pred = rf_clf.predict(X_test)
학습된 모델을 사용해 테스트 데이터의 활동을 예측

accuracy = accuracy_score(y_test, pred)
예측된 결과와 실제 정답을 비교하여 정확도를 계산

print('랜덤 포레스트 정확도: {0:.4f}'.format(accuracy))
모델의 정확도를 출력

랜덤 포레스트(Random Forest)

여러 개의 결정 트리(Decision Trees)를 앙상블하여 분류 문제나 회귀 문제를 해결하는 강력한 머신러닝 알고리즘

랜덤 포레스트의 주요 특징

결정 트리의 앙상블

랜덤 포레스트는 여러 개의 결정 트리를 구성하고,
각 트리의 예측 결과를 평균내거나 투표를 통해 최종 결과를 산출
이 과정을 통해 과적합(overfitting) 문제를 줄이고, 일반화 성능을 높이는 장점이 있음

배깅(Bagging)

각 트리는 데이터 샘플을 부트스트랩 방식으로 랜덤하게 선택하여 학습
각 트리는 전체 학습 데이터의 일부만을 사용해 학습하며,
서로 다른 데이터를 학습하므로 더 다양한 트리가 생성됨
여러 결정 트리의 결과를 종합함으로써 모델의 안정성과 성능이 향상함

무작위 특성 선택

각 결정 트리를 학습할 때, 각 노드에서 최적의 분할을 결정할 특성 피처들을 무작위로 선택함
모델이 모든 트리에서 동일한 피처에 과도하게 의존하지 않도록 방지하여 다양성을 증가시킴

장점

높은 정확도

여러 개의 트리로 예측하기 때문에 단일 결정 트리보다 높은 정확도를 기대할 수 있음

과적합 방지

여러 트리의 결과를 평균 내기 때문에, 과적합의 위험을 줄이고 일반화 능력을 향상시킴

특성 중요도 제공

각 피처의 중요도를 계산해 주기 때문에, 데이터에서 중요한 피처를 쉽게 파악할 수 있음

단점

학습 속도

수많은 결정 트리를 학습시키기 때문에,
데이터가 크거나 트리 개수가 많을 경우 학습 속도가 느려질 수 있음

예측 시간

개별 트리의 예측 결과를 종합해야 하므로 예측 시간이 단일 결정 트리보다 오래 걸릴 수 있음

profile
관심분야: 추천시스템, 자연어처리, 머신러닝, 딥러닝

0개의 댓글