사이킷런 모델 평가 및 선택 기법 탐구: 데이터 과학의 핵심 전략
데이터 과학자들은 끊임없이 더 나은 예측 모델을 만들기 위해 노력합니다. 하지만 데이터를 학습시키는 모델을 만드는 것만으로는 충분하지 않습니다. 모델의 성능을 정확히 평가하고, 다양한 모델 중 가장 적합한 모델을 선택하는 과정은 데이터 과학의 핵심 전략입니다. 이 과정을 통해 우리는 실제 문제에 가장 효과적인 모델을 찾아내어 더 정확한 예측과 더 나은 의사 결정을 이끌어낼 수 있습니다. 사이킷런은 다양한 머신러닝 모델과 함께 이러한 과정을 지원하는 풍부한 기능을 제공합니다. 본 글에서는 사이킷런의 모델 평가 및 선택 기법에 대해 자세히 알아보고, 실질적인 예시를 통해 이해를 돕고자 합니다.
1, 모델 평가: 성능을 정확히 측정하는 기법들
모델 평가는 모델의 예측 성능을 정량화하여 실제 문제에 얼마나 적합한지 판단하는 과정입니다. 사이킷런은 다양한 평가 지표를 제공하며, 문제의 특성에 따라 적절한 지표를 선택해야 합니다.
1.1 회귀 모델 평가
회귀 모델은 연속적인 값을 예측하는 모델입니다. 대표적인 평가 지표로는 다음과 같은 것들이 있습니다.
- 평균 제곱 오차 (MSE): 예측 값과 실제 값의 차이의 제곱을 평균한 값입니다. 오차의 크기를 제곱하기 때문에 큰 오차에 민감합니다.
- 평균 절대 오차 (MAE): 예측 값과 실제 값의 차이의 절댓값을 평균한 값입니다. MSE보다 이상치에 덜 민감합니다.
- 결정 계수 (R-squared): 모델이 데이터의 분산을 얼마나 잘 설명하는지를 나타내는 지표입니다. 1에 가까울수록 모델이 데이터를 잘 설명한다는 의미입니다.
python from sklearn.metrics import meansquarederror, meanabsoluteerror, r2_score
예측값과 실제값
ypred = [1, 2, 3, 4, 5] ytrue = [1.1, 1.9, 3.2, 4.3, 5.1]
평가 지표 계산
mse = meansquarederror(ytrue, ypred) mae = meanabsoluteerror(ytrue, ypred) r2 = r2score(ytrue, y_pred)
print(f"MSE: {mse:.2f}") print(f"MAE: {mae:.2f}") print(f"R-squared: {r2:.2f}")
1.2 분류 모델 평가
분류 모델은 데이터를 여러 클래스로 분류하는 모델입니다. 대표적인 평가 지표로는 다음과 같은 것들이 있습니다.
- 정확도 (Accuracy): 전체 데이터 중에서 정확하게 분류된 데이터의 비율입니다.
- 정밀도 (Precision): 예측된 양성 클래스 중 실제 양성 클래스의 비율입니다.
- 재현율 (Recall): 실제 양성 클래스 중 예측된 양성 클래스의 비율입니다.
- F1 점수 (F1-score): 정밀도와 재현율의 조화 평균으로, 두 지표의 균형을 고려하는 지표입니다.
- AUC (Area Under the Curve): ROC 곡선 아래의 면적입니다. 모델이 데이터를 얼마나 잘 분류하는지 나타내는 종합적인 지표입니다.
python from sklearn.metrics import accuracyscore, precisionscore, recallscore, f1score, rocaucscore
예측값과 실제값
ypred = [0, 1, 1, 0, 1] ytrue = [0, 1, 0, 0, 1]
평가 지표 계산
accuracy = accuracyscore(ytrue, ypred) precision = precisionscore(ytrue, ypred) recall = recallscore(ytrue, ypred) f1 = f1score(ytrue, ypred) auc = rocaucscore(ytrue, ypred)
print(f"Accuracy: {accuracy:.2f}") print(f"Precision: {precision:.2f}") print(f"Recall: {recall:.2f}") print(f"F1-score: {f1:.2f}") print(f"AUC: {auc:.2f}")
2, 모델 선택: 다양한 모델 중 최적의 모델 찾기
모델 평가를 통해 여러 개의 모델의 성능을 비교하고, 문제에 가장 적합한 모델을 선택해야 합니다. 사이킷런은 이를 위한 다양한 방법을 제공합니다.
2.1 교차 검증 (Cross-validation)
교차 검증은 데이터를 여러 개의 폴드 (fold)로 나누어 각 폴드를 검증 집합으로 사용하고 나머지 폴드를 학습 집합으로 사용하는 방법입니다. 이를 통해 모델의 일반화 성능을 측정하고, 다양한 모델의 성능을 비교할 수 있습니다. 사이킷런은 K-fold 교차 검증, Leave-One-Out 교차 검증 등 다양한 교차 검증 기법을 제공합니다.
python from sklearn.modelselection import crossval_score
모델
model = LogisticRegression()
교차 검증
scores = crossvalscore(model, X, y, cv=5)
평균 정확도
print(f"Cross-validation Accuracy: {scores.mean():.2f}")
2.2 그리드 서치 (Grid Search)
그리드 서치는 여러 개의 모델 하이퍼파라미터 조합을 시도하여 최적의 하이퍼파라미터를 찾는 방법입니다. 사이킷런은 GridSearchCV 클래스를 제공하여 간편하게 그리드 서치를 수행할 수 있습니다.
python from sklearn.model_selection import GridSearchCV
모델
model = LogisticRegression()
하이퍼파라미터 범위
param_grid = {'C': [0.1, 1, 10], 'penalty': ['l1', 'l2']}
그리드 서치
gridsearch = GridSearchCV(model, paramgrid, cv=5) grid_search.fit(X, y)
최적의 하이퍼파라미터와 성능
print(f"Best Parameters: {gridsearch.bestparams}") print(f"Best Score: {gridsearch.bestscore:.2f}")
2.3 랜덤 서치 (Random Search)
랜덤 서치는 그리드 서치와 유사하지만, 하이퍼파라미터 조합을 랜덤하게 선택합니다. 그리드 서치보다 더 효율적으로 최적의 하이퍼파라미터를 찾을 수 있으며, 사이킷런은 RandomizedSearchCV 클래스를 제공합니다.
python from sklearn.model_selection import RandomizedSearchCV
모델
model = LogisticRegression()
하이퍼파라미터 범위
param_distributions = {'C': np.logspace(-3, 3, 10), 'penalty': ['l1', 'l2']}
랜덤 서치
randomsearch = RandomizedSearchCV(model, paramdistributions, cv=5, niter=10) randomsearch.fit(X, y)
최적의 하이퍼파라미터와 성능
print(f"Best Parameters: {randomsearch.bestparams}") print(f"Best Score: {randomsearch.bestscore:.2f}")
3, 모델 선택 가이드: 문제 유형별 최적 모델 선택
데이터 과학 문제는 다양한 유형으로 나눌 수 있으며, 각 유형에 따라 적합한 모델이 다릅니다. 아래 표는 일반적인 문제 유형
'파이썬' 카테고리의 다른 글
PySide2: PyQt의 대안, 파이썬에서 고성능 GUI를 구축하기 (0) | 2024.11.06 |
---|---|
파이썬 장고: 웹 프로젝트 구축 및 개발 단계 (3) | 2024.11.06 |
try-except 구문을 통한 오류 처리 구현하기 (0) | 2024.11.06 |
파이썬 모듈과 패키지: 테스트하기와 이점 (0) | 2024.11.06 |
파이썬 유니코드 산술 및 비교 연산자 (1) | 2024.11.06 |