미식가의 개발 일기

[머신러닝] 분류 문제 vs 회귀 문제 본문

ML, DL

[머신러닝] 분류 문제 vs 회귀 문제

대체불가 핫걸 2024. 7. 13. 22:35
예측하려는 목표 변수의 유형에 따라 분류 문제와 회귀 문제로 나뉜다.

 

용어 정리

이산적 값
  • 구분되는 개별적인 값을 가지는 데이터, 두 값 사이에는 무한한 값이 존재하지 않는다.
  • 정수형 데이터: 학생의 수, 책의 수 등
  • 범주형 데이터: 성별, 교통 수단 등
연속적 값
  • 일정한 범위 내에서 무한히 많은 값을 가질 수 있는 데이터
  • 온도, 길이, 무게, 연봉, 시간 등

 

분류 문제(Classification Problem)

개념

  • 목표 변수: 이산적(범주형) 
  • 목적: 주어진 입력 데이터에 대해 여러 클래스(범주) 중 하나를 예측하는 것
  • 예시:
    • 이메일이 스팸인지 아닌지
    • 이미지가 개, 고양이, 새 중 무엇인지
  • 알고리즘
    • 로지스틱 회귀(Logistic Regression): 이진 분류 문제
    • 결정 트리(Decision Tree): 데이터를 기반으로 의사결정, 각 노드는 조건문을 포함하고 리프 노드는 예측 결과 나타
    • 랜덤 포레스트(Random Forest): 여러 개의 결정 트리를 앙상블하여 예
    • 서포트 벡터 머신(SVM): 고차원 공간에서 데이터 분리
    • k-최근접 이웃(k-NN): 가장 가까운 k개의 데이터를 기준으로 분
    • 인공 신경망(ANN): 인간의 뇌 구조를 모방

 

성능 평가

  • 정확도(Accuracy)

    "분류 모델의 예측 성능을 나타내는 기본적인 지표"

정확도 = 올바르게 예측된 데이터 수 / 전체 데이터 

-> 데이터 불균형으로 인해 실제 성능이 왜곡될 수 있으므로 정확도에만 의존해서는 안 된다.

from sklearn.metrics import accuracy_score

accuracy =  accuracy_score(y_val, y_pred)

 

 

  • 혼돈 행렬(Confusion Matrix)

    "실제값과 예측값의 조합을 행렬 형태로 나타낸 것"

  실제 정답
True False
분류 결과 True TP FP
False FN TN

 

TP(True Positives): 양성 클래스를 양성으로 예측
TN(True Negatives): 음성 클래스를 음성으로 예측
FP(False Positives): 음성 클래스를 양성으로 예측
FN(False Negatives): 양성 클래스를 음성으로 예측
※ 양성 클래스란? -> 관심 있는 클래
from sklearn.metrics import confusion_matrix

cf_mat = confusion_matrix(y_val, y_pred)

 

 

  • 정밀도(Precision)

    "양성으로 예측한 항목 중 실제로 양성인 항목의 비율을 측정(잘못된 정보를 최소화)"

정밀도 = TP / (TP + FP)
from sklearn.metrics import precision_score

precision =  precision_score(y_val, y_pred, average='macro')

 

 

  • 재현률(Recall)

    "실제 양성 클래스 중 올바르게 양성으로 예측한 비율을 측정(실제 양성 케이스를 놓치지 않는 것이 중요할 때)"

재현률 = TP / (TP + FN)
from sklearn.metrics import recall_score

f1_score_diabets_DT =  f1_score(y_val, y_pred)

 

※ 정밀도와 재현률의 Trade-Off ※

정밀도를 높이려면 재현률이 떨어지고, 재현률을 높이면 정밀도가 떨어진다.

두 가지를 모두 완벽하게 최적화하는 것은 어려우므로 상황에 맞게 선택해야 한다.

아래 F1 점수는 두 지표의 절충안을 제공해준다.

 

 

  • F1 점수(F1 Score)

    "정밀도와 재현율의 조화 평균을 나타내는 지표(두 지표 간의 균형을 맞추고 있을 때 높은 값을 가짐)"

from sklearn.metrics import f1_score

f1_score_diabets_DT =  f1_score(y_val, y_pred)

 

회귀 문제(Regression Problem)

개념

  • 목표 변수: 연속적(수치형) 값
  • 목적: 주어진 입력 데이터에 대해 연속적인 값을 예측 하는 것
  • 예시:
    • 온도 예측
    • 주가 예측
  • 알고리즘
    • 선형 회귀(Linear Regression)
    • 다중 선형 회귀(Multiple Linear Regression)
    • 결정 트리(Decision Tree)
    • 랜덤 포레스트(RandomForest)
    • 서포트 벡터 회귀(SVR)
    • 인공 신경망

 

성능 평가

  • 평균 제곱근 오차(Root Mean Squared Error, RMSE) : 작을수록 실제 값에 더 가깝다.

  "예측 오차의 크기를 나타내는 지표, 값이 작을수록 예측 정확도가 높다."

  "오차가 클수록 큰 가중치를 부여하므로 차이가 클수록 더 잘 잡아낼 수 있다.(but 작은 오차가 많은 경우에는 성능이 좋아보일 수 있다는 단점이 있다.)"

RMSE 수식

from sklearn.metrics import mean_squared_error
import numpy as np

rmse = np.sqrt(mean_squared_error(y_valid, y_pred))
# rmse = mean_squared_error(y_valid, y_pred, squared=False)
# 2개 모두 같은 값을 반환한다.

 

 

  • 평균 절대 오차(Mean Absolute Error, MAE): 작을수록 실제 값에 더 가깝다.

    "예측 값이 실제 값에서 평균적으로 얼마나 떨어져 있는지를 나타내는 지표, 값이 작을수록 예측 정확도가 높다."

    "오차의 크기에 관계없이 모든 오차를 같은 비중으로 다룬다. -> 이상치에 대한 민감도가 낮다."

MAE 수식

from sklearn.metrics import mean_absolute_error

mae = mean_absolute_error(y_valid, y_pred)

 

반응형