Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- SQLD
- KT 에이블스쿨
- 케이티 에이블스쿨 6기 ai
- 구현
- 네트워크
- 케이티 에이블스쿨 6기
- 데이터 프레임
- 케이티 에이블스쿨
- 프로그래머스
- 앙상블
- kt 에이블스쿨 6기
- 오블완
- 케이티 에이블스쿨 6기 후기
- 백준
- 판다스
- 에이블 기자단
- KT AIVLE
- 알고리즘
- 머신러닝
- 티스토리챌린지
- 엘라스틱서치
- kt 에이블스쿨 6기 빅프로젝트
- 파이썬
- 케이티 에이블스쿨 6기 java
- ElasticSearch
- 케이티 에이블스쿨 기자단
- kt 에이블스쿨 기자단
- kt aivle school
- kt 에이블스쿨 6기 미니 프로젝트
- kt 에이블스쿨 6기 ai
Archives
- Today
- Total
미식가의 개발 일기
[머신러닝] 분류 문제 vs 회귀 문제 본문
예측하려는 목표 변수의 유형에 따라 분류 문제와 회귀 문제로 나뉜다.
용어 정리
이산적 값
- 구분되는 개별적인 값을 가지는 데이터, 두 값 사이에는 무한한 값이 존재하지 않는다.
- 정수형 데이터: 학생의 수, 책의 수 등
- 범주형 데이터: 성별, 교통 수단 등
연속적 값
- 일정한 범위 내에서 무한히 많은 값을 가질 수 있는 데이터
- 온도, 길이, 무게, 연봉, 시간 등
분류 문제(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 작은 오차가 많은 경우에는 성능이 좋아보일 수 있다는 단점이 있다.)"

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): 작을수록 실제 값에 더 가깝다.
"예측 값이 실제 값에서 평균적으로 얼마나 떨어져 있는지를 나타내는 지표, 값이 작을수록 예측 정확도가 높다."
"오차의 크기에 관계없이 모든 오차를 같은 비중으로 다룬다. -> 이상치에 대한 민감도가 낮다."

from sklearn.metrics import mean_absolute_error
mae = mean_absolute_error(y_valid, y_pred)
반응형
'ML, DL' 카테고리의 다른 글
| [머신러닝] 데이터 변환 및 시각화(with 캐글) (0) | 2024.07.14 |
|---|---|
| [머신러닝] 회사 합격 여부 예측하기(분류: 결정 트리, 랜덤 포레스트) (7) | 2024.07.14 |
| [머신러닝] 로지스틱 회귀분석(Logistic Regresstion) (2) | 2024.07.13 |
| [머신러닝] 범주형 데이터 인코딩 (1) | 2024.07.12 |
| [머신러닝] 결측치, 중복값 처리 (1) | 2024.07.12 |