TOP
class="layout-aside-left paging-number">
본문 바로가기
데이터분석 만능열쇠 [파이썬]/<파이썬 머신러닝>

[파이썬] 분류: 앙상블 학습(Ensemble Learning) - 1

by 기록자_Recordian 2024. 6. 27.
728x90
반응형
시작에 앞서
해당 내용은 '<파이썬 머신러닝 완벽 가이드> 권철민 지음. 위키북스' 를 토대로 작성되었습니다. 보다 자세한 내용은 해당 서적에 상세히 나와있으니 서적을 참고해 주시기 바랍니다.

앙상블 학습(Ensemble Learning)

 

앙상블 학습을 통한 분류는,

여러 개의 분류기를 생성하고 그 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법을 말한다.

 

앙상블 학습의 목표는,

다양한 분류기의 예측 결과를 결합함으로써 단일 분류기보다 신뢰성이 높은 예측값을 얻는 것이다.

 

[앙상블 유형의 알고리즘]

  • 랜덤 포레스트
  • 그래디언트 부스팅
  • XG Boost
  • LightGBM
  • 스태킹

[앙상블 학습의 유형]

  • 부스팅: 여러 개의 분류기가 순차적으로 학습을 수행하되, 예측이 틀린 데이터에 대해서는 올바르게 예측할 수 있도록 다음 분류기에게는 가중치를 부여하면서 학습과 예측 진행 (대표: 그래디언트 부스트, XG Boost, LightGBM)
  • 배깅: 각각의 분류기가 모두 같으나, 데이터 샘플링을 다르게 가져가면서 학습 수행 (대표: 랜덤 포레스트)
  • 보팅: 서로 다른 알고리즘을 가진 분류기 결합

※ 부트스트래핑(Bootstrapping): 개별 분류기에게 데이터를 샘플링해서 추출하는 방식

※ 스태킹(Stacking): 여러 가지 다른 모델의 예측 결괏값을 다시 학습 데이터로 만들어서 다른 모델로 재학습시켜 결과를 예측하는 방법

 

앙상블 관련 내용은 하단 링크에서 확인할 수 있다. (7. 앙상블 분석 내용 확인)

 

[빅데이터 분석기사] 3과목 빅데이터 모델링(3-2-2)

[목차] [빅데이터 분석기사] 시험 과목 및 주요 내용 (필기)빅데이터 분석기사 (필기) 시험 과목 및 주요 내용 출처: 데이터자격검정 (dataq.or.kr) 필기과목명 주요항목 세부항목 세세항목 빅데이터

puppy-foot-it.tistory.com


하드 보팅 vs 소프트 부팅
Hard Voting vs Soft Voting

 

◆ 하드 보팅: 예측한 결괏값들 중 다수의 분류기가 결정한 에측값을 최종 보팅 결괏값으로 선정

◆ 소프트 보팅: 분류기들의 레이블 값 결정 확률을 모두 더하고 이를 평균해서 이들 중 확률이 가장 높은 레이블 값을 최종 보팅 결괏값으로 선정

▶ 일반적으로 소프트 보팅 적용 (예측 성능이 비교적 좋음)


보팅 분류기 (Voting Classifier)
위스콘신 유방암 데이터 세트 예측 분석

 

사이킷런은 VotingClassifier 클래스를 제공하고 있으며, load_breast_cancer() 함수를 통해 자체에서 위스콘신 유방암 데이터 세트를 생성할 수 있다.

 

위스콘신 유방암 데이터 세트는 유방암의 악성종양, 양성종양 여부를 결정하는 이진 분류 데이터 세트이며 종양의 크기, 모양 등의 형태와 관련한 많은 피처를 가지고 있다.

 

로지스틱 회귀와 KNN을 기반으로 보팅 분류기를 만드는 작업을 수행한다.

 

1, 필요한 모듈, 데이터 로딩 후 데이터 세트 파악

#위스콘신 유방암 데이터 예측 분석 (앙상블)
# 필요 모듈 데이터 로드
import pandas as pd

from sklearn.ensemble import VotingClassifier #앙상블 보팅 분류기
from sklearn.linear_model import LogisticRegression #로지스틱 회귀
from sklearn.neighbors import KNeighborsClassifier #KNN
from sklearn.datasets import load_breast_cancer #위스콘신 유방암 데이터
from sklearn.model_selection import train_test_split #훈련, 테스트 데이터 분할
from sklearn.metrics import accuracy_score #정확도

# 유방암 데이터 로드
cancer = load_breast_cancer()

data_df = pd.DataFrame(cancer.data, columns=cancer.feature_names)
data_df.head()

 

2. 로지스틱 회귀와 KNN을 기반으로 보팅 분류기 생성(소프트 보팅)

# 로지스틱 회귀와 KNN을 기반으로 보팅 분류기 생성(소프트 보팅)
# 개별 모델은 로지스틱 회귀와 KNN
lr_clf = LogisticRegression(solver='liblinear')
knn_clf = KNeighborsClassifier(n_neighbors=8)

# 개별 모델을 소프트 보팅 기반의 앙상블 모델로 구현한 분류기
vo_clf = VotingClassifier(estimators=[('LR',lr_clf), ('KNN', knn_clf)], voting='soft')

X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target,
                                                    test_size=0.2, random_state=156)

# VotingClassifier 학습/예측/평가
vo_clf.fit(X_train, y_train)
pred = vo_clf.predict(X_test)
print('Voting 분류기 정확도: {0:.4f}'.format(accuracy_score(y_test, pred)))

# 개별 모델의 학습/예측/평가
classifiers = [lr_clf, knn_clf]
for classifier in classifiers:
    classifier.fit(X_train, y_train)
    pred = classifier.predict(X_test)
    class_name = classifier.__class__.__name__
    print('{0} 정확도: {1:.4f}'.format(class_name, accuracy_score(y_test, pred)))

 

▶ 보팅으로 여러 개의 분류기를 결합한다고 무조건 기반 분류기보다 예측 성능이 향상되는 것은 아니다.

 

머신러닝 모델의 성능은 다양한 테스트 데이터에 의해 검증되므로 어떻게 높은 유연성을 가지고 현실에 대처할 수 있는가가 중요한 평가 요소가 된다.

 

앙상블 학습에서는 결정 트리 알고리즘의 단점 (과적합 발생으로 인한 실제 테스트 데이터에서의 예측 성능 저하)을 수십에서 수천 개의 매우 많은 분류기를 결합해 다양한 상황을 학습하게 함으로써 극복하고 있다.


다음글

 

[파이썬] 분류 > 앙상블 - 2 : 랜덤 포레스트

시작에 앞서해당 내용은 ' 권철민 지음. 위키북스' 를 토대로 작성되었습니다. 보다 자세한 내용은 해당 서적에 상세히 나와있으니 서적을 참고해 주시기 바랍니다.앙상블 학습(Ensemble Learning)랜

puppy-foot-it.tistory.com

 

728x90
반응형