2023.08.21 - [IT & 개발공부/파이썬(Python)] - 머신러닝 알고리즘(선형회귀, 결정트리 등) 이해하기
머신러닝 알고리즘(선형회귀, 결정트리 등) 이해하기
- 이번 글에서는 다양한 머신러닝 알고리즘 중 몇가지들을 배워보도록 하겠다. 1. 선형회귀 더보기 * 회귀분석이란 - 일단 회귀분석을 왜 하는지 알아야 앞으로 내용들도 섞이지 않을 것이다. 회
bmil2011s.tistory.com
- 이전 글에서 간단히 언급만 하고 넘어갔던 앙상블 알고리즘의 보팅 코드 실습을 해보고자 한다.
- 보팅 방식의 앙상블을 이용하여 위스콘신 유방암 데이터를 바탕으로 예측 분석을 실시한다.
1. 보팅(Voting)
1-1. 데이터 로딩 및 확인하기
- 다음의 코드와 같이 작성하여 사이킷런의 load_breats_cancer 데이터를 불러오고 데이터프레임으로 데이터들을 확인해보자.
1-2. 모델 학습
- 로지스틱 회귀와 KNN을 기반으로 하여 소프트 보팅 방식으로 새롭게 보팅 분류기를 만들어 보자. 사이킷런의 VotingClassifier 클래스를 이용하면 된다.
* VotingClassifier는 주요 생성인자로 estimators와 voting 값을 입력받는다. estimator는 리스트 값으로 보팅에 사용될 여러 개의 Classifier 객체들을 튜플 형식으로 입력 받으며, voting은 hard / soft 방식을 정할 수 있고 기본값은 hard 이다.
* KNN
KNN은 기계 학습에서 간단하고 널리 사용되는 분류 및 회귀 알고리즘입니다. KNN은 인스턴스 기반 학습 또는 지연 학습의 한 유형으로, 알고리즘은 훈련 단계에서 명시적으로 모델을 학습하지 않고 훈련 데이터셋을 기억합니다. KNN은 주로 분류 작업에 사용되지만 회귀 작업에도 적용될 수 있습니다. KNN의 작동 방식은 다음과 같습니다
훈련 단계: 훈련 단계에서 KNN은 단순히 전체 훈련 데이터셋을 해당하는 레이블과 함께 저장합니다. 이 데이터셋은 알고리즘이 예측을 수행하는 데 사용하는 "지식" 역할을 합니다.
예측 단계 (분류): 분류를 위해 새로운 레이블이 없는 데이터 포인트가 제공되면 KNN은 선택한 거리 측정 방법 (보통 유클리드 거리)을 기반으로 훈련 데이터셋에서 가장 가까운 k개의 이웃을 찾습니다. 이러한 이웃은 새 데이터 포인트와 가장 유사한 특징을 가진 데이터 포인트입니다.
예측 단계 (회귀): 회귀의 경우, k개의 가장 가까운 이웃의 레이블을 직접 사용하는 대신 그들의 레이블의 평균 (또는 가중 평균)을 계산하여 새 데이터 포인트의 레이블을 예측합니다.
출처 : Chat-GPT 230824
- 결과적으로 보팅 분류기 정확도가 상대적으로 조금 높게 나타났는데, 보팅으로 여러 개의 기반 분류기를 결합한다고 하여 무조건 기반 분류기들보다 예측 성능이 향상되는 것은 아니다. 데이터의 특성과 분포 등 다양한 요건을 고려하면 보팅을 안하는 것이 나은 선택일 때도 있는 것이다.
- 물론 보팅을 포함한 배깅과 부스팅 등의 앙상블 방법은 전반적으로 다른 단일 ML 알고리즘보다 뛰어난 예측 성능을 가지는 경우가 많다. 고정된 데이터 세트에서 단일 ML 알고리즘이 뛰어난 성능을 발휘하더라도 현실 세계는 다양한 변수와 예측이 어려운 규칙으로 구성되어 있기 때문이다(결정트리의 데이터 과적합을 떠올려보면 이해가 될 것이다).
앙상블 학습에서는 이 같은 결정 트리 알고리즘의 단점을 수십~수천 개의 매우 많은 분류기를 결합하여 다양한 상황을 학습하게 함으로써, 결정 트리의 장점은 그대로 취하고 단점은 보완하며 편향-분산 트레이드 오프 효과를 극대화할 수 있는 것이다.
2. 배깅(bagging)
- 배깅은 보팅과 다르게, 같은 알고리즘으로 여러 개의 분류기를 만들어서 보팅으로 최종 결정하는 알고리즘이다. 이러한 배깅의 대표적인 알고리즘은 랜덤포레스트로 앙상블 알고리즘 중 비교적 빠른 수행 속도를 가지고 있으며 다양한 영역에서 높은 예측 성능을 보이고 있다. 랜덤포레스트의 기반 알고리즘은 결정 트리로서 결정트리의 쉽고 직관적인 장점을 그대로 가지고 있다.
2-1. 데이터 로딩 및 모델 예측 평가
- 이전 글인 결정트리에서 사용했던 사용자 행동인식 데이터 세트를 이용하여 예측을 수행해보자
2-2 랜덤 포레스트 하이퍼 파라미터 튜닝
- 이번에는 GridSearchCV를 이용하여 랜덤포레스트 하이퍼 파라미터를 튜닝해보도록 하자.
그리드 서치를 통해 찾은 최적의 하이퍼파라미터 조합을 출력하고, 그리드 서치를 통해 찾은 최적의 하이퍼파라미터 조합으로 교차 검증을 수행한 결과 중 가장 높은 평균 정확도를 출력한다. 이때 best_score_ 를 통해 얻을 수 있다.
3. 최종 모델 예측
- 위에서 얻은 하이퍼 파라미터 값들을 이용하여 모델을 학습시킨 뒤 별도의 "테스트 데이터 세트" 에서 예측 성능을 측정할 수 있고, 다음 코드와 같다.
rf_clf1 = RandomForestClassifier(n_estimators=300, max_depth=10, min_samples_leaf=8, \
min_samples_split=8, random_state=0)
rf_clf1.fit(X_train , y_train)
pred = rf_clf1.predict(X_test)
print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test , pred)))
=> 예측 정확도 : 0.9260
이 글은 파이썬 머신러닝 완벽 가이드 개정 2판(권철민, 2022)을 일부 참고하여 작성하였습니다.
'IT & 개발공부 > 파이썬(Python)' 카테고리의 다른 글
머신러닝 코드 실습 - 부스팅(GBM, XGBoost, LightGBM) - 2 (0) | 2023.08.27 |
---|---|
머신러닝 코드 실습 - 부스팅(GBM, XGBoost, LightGBM) - 1 (0) | 2023.08.26 |
데이터를 함수를 이용하여 불러오기(결정 트리 실습까지) (0) | 2023.08.23 |
머신러닝 코드 실습 - 결정트리 & 과적합 (0) | 2023.08.22 |
머신러닝 알고리즘(선형회귀, 결정트리 등) 이해하기 (0) | 2023.08.21 |