짜리몽땅 매거진
[ML] AutoML_TPOT으로 최적 모델 찾기 본문
머신러닝 모델을 개발하고 실제 운영에 도입하기에는 수많은 과정을 거치게 된다.
AutoML은 머신러닝을 적용할 때마다 이러한 과정을 되풀이하면서 발생하는 비효율적인 작업을 최대한 자동화하여 생산성과 효율을 높이기 위하여 등장하였다. 특히, 데이터 전처리 과정에서부터 알고리즘 선택 및 튜닝까지의 과정에서 분석가의 개입을 최소화 하여 품질 좋은 모델을 효과적으로 개발할 수 있는 기술에 대한 연구가 오랫동안 진행되어 왔다.
그 중에서도 TPOT은 예측 모델링 작업을 위한 고품질 기계 학습 모델을 자동으로 발견하기 위해 널리 사용되는 AutoML 라이브러리다. Genetic programming으로 머신러닝 파이프라인을 최적화하는 파이썬 AutoML 툴fh, 수천 개의 가능한 파이프라인 중에서 가장 적합한 것을 사용하여 규칙적이고 지루한 작업을 자동화하는 데 도움이 된다.
그렇다면 TPOT으로 여러 모델을 비교해 최적의 모델과 하이퍼파라미터를 출력하는 실습을 진행해보자.
TPOT 주요 설정
- 교차 검증 (cv=5)
- 교차 검증을 통해 모델 성능을 평가하여 과적합을 방지. cv=5로 설정하여 5-겹 교차 검증을 수행.
- 서브샘플링 (subsample=0.8)
- 모델이 학습에 사용하는 데이터의 일부만 선택하여 학습함으로써 과적합을 방지. 예를 들어, subsample=0.8은 전체 데이터의 80%만을 사용하여 학습을 수행.
- 조기 종료 (early_stop=3)
- 과적합을 방지하기 위해 성능이 개선되지 않는 경우 탐색 조기 종료 가능. early_stop=3은 3세대 동안 성능이 개선되지 않으면 조기 종료.
# 하이퍼파라미터 예시
tpot = TPOTClassifier(
generations=10, # 세대 수를 늘려 더 많은 모델을 탐색
population_size=50, # 인구 크기 조정
verbosity=3, # 디버깅 로그 출력 레벨
cv=5, # 교차 검증
subsample=0.8, # 서브샘플링 비율
random_state=42,
early_stop=5 # 조기 종료 조건을 높게 설정
)
import pandas as pd
from tpot import TPOTClassifier
# 타이타닉 데이터 불러오기
df =sns.load_dataset('titanic')
# 간단한 전처리
X=df.drop(columns=['survived'])
y=df['survived']
X_new=X[['pclass', 'sex', 'age', 'sibsp', 'parch', 'fare', 'embarked', 'class',
'who', 'adult_male', 'deck', 'embark_town', 'alone']]
# 원핫 인코딩
X_new=pd.get_dummies(X_new, columns=['sex','embarked','class','who','deck','embark_town','alone'])
# 데이터 분할
X_train, X_test, y_train, y_test= train_test_split(X_new,y, test_size=0.2, random_state=111)
# AutoML 진행
tpot = TPOTClassifier(verbosity=2, generations=5, population_size=20, random_state=111)
tpot.fit(X_train, y_train)
y_pred=tpot.predict(X_test)
print(tpot.score(X_test, y_test))
tpot.evaluated_individuals_.items()
위 코드를 통해 탐색한 모델들을 전부 확인하는 것도 가능하다.
'Data > Machine Learning' 카테고리의 다른 글
[ML] 유저이탈 예측하기 (0) | 2025.01.04 |
---|---|
[ML] 텍스트 벡터화하고 LDA 토픽모델링하기 (0) | 2024.10.30 |
[ML] Sweetviz와 Pipeline으로 모델링하기 (0) | 2024.10.29 |
[ML] 데이터 샘플링 (0) | 2024.10.25 |
[ML] 데이터 변환 (1) | 2024.08.19 |