Python으로 랜덤 포레스트 분류 모델 구현하기

머신러닝에서 랜덤 포레스트(Random Forest) 모델은 예측 성능이 뛰어나고, 다양한 문제에 효과적으로 적용될 수 있는 인기 있는 알고리즘입니다. 이 포스트에서는 Pythonscikit-learn 라이브러리를 사용하여 랜덤 포레스트 분류기를 구현하는 방법을 소개합니다. 간단한 데이터셋을 생성하여 학습하고, 모델의 예측 정확도를 평가하는 과정을 함께 살펴보겠습니다. 머신러닝 초보자도 쉽게 따라할 수 있도록 코드와 설명을 단계별로 제공합니다. Python Machine Learning에 관심이 있다면, 랜덤 포레스트 모델의 기초를 이해하는 데 도움이 될 것입니다.

랜덤 포레스트 분류 이해하기

랜덤 포레스트(Random Forest)는 여러 개의 결정 트리(Decision Trees)를 결합하여 예측을 수행하는 앙상블 학습 알고리즘입니다. 각 결정 트리는 데이터의 부분 집합을 사용하여 학습되며, 최종 예측은 이 트리들의 다수결 투표를 통해 결정됩니다. 이러한 구조는 과적합(Overfitting)을 줄이고, 예측 성능을 향상시키는 데 큰 장점을 제공합니다.

Pythonscikit-learn 라이브러리는 랜덤 포레스트 모델을 쉽게 구현할 수 있는 기능을 제공합니다. 다음 섹션에서는 샘플 데이터를 생성하고, 이 데이터를 기반으로 랜덤 포레스트 분류기를 학습시키는 과정을 코드와 함께 설명하겠습니다. 먼저, 소스코드를 이용해서 실행해보고 싶으신, 급하신 분은 포스트 마지막에 명시하고 있는 전체 코드를 복붙하시면 됩니다.

파이썬 코드 단계별 설명

1. 필요한 라이브러리 임포트

먼저, 모델을 생성하고 데이터를 처리하는 데 필요한 라이브러리를 불러옵니다.

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
  • RandomForestClassifier: 랜덤 포레스트 분류 모델을 생성하는 데 사용됩니다.
  • make_classification: 샘플 데이터를 생성하는 함수로, 분류 문제에 적합한 데이터를 만듭니다.
  • train_test_split: 데이터셋을 학습용과 테스트용으로 나누는 함수입니다.
  • accuracy_score: 모델의 예측 정확도를 평가하는 함수입니다.

2. 샘플 데이터 생성

이제, 랜덤 포레스트 모델을 학습시킬 샘플 데이터를 생성합니다.

# 샘플 데이터 생성
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_clusters_per_class=1, random_state=42)
  • n_samples=1000: 1000개의 샘플을 생성합니다.
  • n_features=20: 각 샘플이 20개의 특징을 가지도록 설정합니다.
  • n_informative=15: 20개의 특징 중 15개는 유의미한 정보를 가지고 있습니다.
  • n_clusters_per_class=1: 각 클래스는 하나의 클러스터로 묶입니다.
  • random_state=42: 랜덤 시드값을 설정하여 결과를 재현 가능하게 합니다.

3. 데이터셋을 학습용과 테스트용으로 분리

생성된 데이터를 학습용과 테스트용으로 분리합니다.

# 데이터셋을 학습용과 테스트용으로 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
  • test_size=0.3: 데이터의 30%를 테스트용으로 사용합니다.
  • random_state=42: 랜덤 시드값을 설정하여 결과를 재현 가능하게 합니다.

4. 랜덤 포레스트 모델 생성

랜덤 포레스트 모델을 생성합니다.

# 랜덤 포레스트 모델 생성
model = RandomForestClassifier(n_estimators=100, random_state=42)
  • n_estimators=100: 100개의 결정 트리를 생성하여 앙상블 모델을 구성합니다.
  • random_state=42: 랜덤 시드값을 설정하여 결과를 재현 가능하게 합니다.

5. 모델 학습

학습용 데이터를 사용하여 모델을 학습시킵니다.

# 모델 학습
model.fit(X_train, y_train)

fit 메소드를 사용하여 학습용 데이터 X_trainy_train을 통해 모델을 학습시킵니다.

6. 모델 예측

테스트 데이터를 사용해 학습된 모델로 예측을 수행합니다.

# 예측
y_pred = model.predict(X_test)

predict 메소드를 사용하여 테스트 데이터 X_test에 대한 예측 결과를 생성합니다.

7. 정확도 평가

모델의 예측 결과를 바탕으로 정확도를 평가합니다.

# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

accuracy_score 함수를 사용해 실제 레이블 y_test와 예측값 y_pred를 비교하여 모델의 정확도를 계산합니다.

전체 통합 코드

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 샘플 데이터 생성
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_clusters_per_class=1, random_state=42)

# 데이터셋을 학습용과 테스트용으로 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 랜덤 포레스트 모델 생성
model = RandomForestClassifier(n_estimators=100, random_state=42)

# 모델 학습
model.fit(X_train, y_train)

# 예측
y_pred = model.predict(X_test)

# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

전체코드 실행결과

위 전체 코드를 random_forest.py 파일로 만들어서 파이썬 코드를 실행해보면 아래와 같은 결과가 나옵니다. 출력된 결과인 Accuracy: 0.96는 모델이 테스트 데이터에 대해 96%의 정확도를 보였음을 의미합니다. 즉, 100개의 테스트 데이터 중 96개를 정확히 예측했다는 뜻입니다.

이번 코드는 랜덤 포레스트를 사용해 생성된 데이터셋에서 분류 작업을 수행하고, 매우 높은 정확도(96%)를 달성한 예시입니다. 랜덤 포레스트는 여러 개의 의사결정 나무를 사용해 예측 성능을 향상시키는 강력한 머신러닝 알고리즘으로, 이 결과를 통해 모델이 데이터의 패턴을 잘 학습했음을 알 수 있습니다.

자주 묻는 질문 (FAQ)

Q1. 랜덤 포레스트(Random Forest)란 무엇인가요?
A1. 랜덤 포레스트는 여러 개의 결정 트리(Decision Trees)를 결합하여 예측을 수행하는 앙상블 학습 알고리즘입니다. 개별 트리의 약점을 보완하고 과적합을 줄이는 데 효과적입니다.

Q2. 랜덤 포레스트의 n_estimators 파라미터는 무엇을 의미하나요?
A2. n_estimators는 생성할 결정 트리의 수를 의미합니다. 트리의 수가 많을수록 예측 성능이 좋아질 수 있지만, 학습 시간이 길어질 수 있습니다.

Q3. 모델의 정확도(Accuracy)를 높이기 위한 방법은 무엇이 있나요?
A3. 모델의 정확도를 높이기 위해서는 더 많은 데이터를 사용하거나, 하이퍼파라미터를 튜닝하는 방법이 있습니다. 또한, 다른 알고리즘과 비교하여 최적의 모델을 선택하는 것도 중요합니다.

Q4. 왜 random_state를 설정해야 하나요?
A4. random_state를 설정하면 코드 실행 시 동일한 결과를 얻을 수 있습니다. 이는 코드의 재현성을 보장하는 데 중요합니다.

정리하기

이번 포스트에서는 Pythonscikit-learn을 사용하여 랜덤 포레스트 분류기를 구현하고, 샘플 데이터를 통해 모델을 학습시킨 후 예측 정확도를 평가하는 과정을 살펴보았습니다. Python Machine Learning의 기초적인 예제로, 랜덤 포레스트의 기본 개념을 이해하는 데 도움이 되었기를 바랍니다. 앞으로도 다양한 데이터셋과 문제에 랜덤 포레스트를 적용해보며 실습해 보세요!

Similar Posts