[KT AIVLE] DX트랙 머신러닝(6주차) 복습(머신러닝, 분류, 회귀, 모델 성능 평가)

728x90

머신러닝 복습

 

머신러닝

1. 머신러닝

  • 컴퓨터 시스템에게 데이터에서 학습하고 패턴을 식별하여 작업을 수행할 수 있는 능력을 부여하는 인공지능의 한 분야
  • 다양한 알고리즘과 기술을 사용하여 모델을 훈련시키고, 이 모델은 새로운 데이터를 분석하고 예측하거나 패턴을 인식하여 의사 결정을 내림

지도학습(Supervised Learning)

  • 학습 대상이 되는 데이터에 정답을 주어 규칙성을 배우게 하는 방법

비지도학습(Unsupervised Learning)

  • 정답이 없는 데이터만으로 배우게 하는 학습 방법

강화학습(Reinforcement Learning)

  • 선택한 결과에 대해 보상을 받아 행동을 개선하면서 배우게 하는 학습 방법

 

2. 분류와 회귀

분류

  • 범줏값을 예측
  • 로지스틱 회귀 (Logistic Regression), 결정 트리 (Decision Trees), 랜덤 포레스트 (Random Forest), 서포트 벡터 머신 (Support Vector Machine, SVM), k-최근접 이웃 (k-Nearest Neighbors, k-NN)

 

회귀

  • 연속적인 숫자를 예측
    • 두 값 사이의 중간값이 의미가 있는 숫자인지
    • 두 값에 대한 연산 결과가 의미가 있는 숫자인지
  • 선형 회귀 (Linear Regression), 다항 회귀 (Polynomial Regression), 결정 트리 회귀 (Decision Tree Regression), 랜덤 포레스트 회귀 (Random Forest Regression)

 

분류와 회귀는 서로 다른 함수를 사용해서 모델링을 함

  1. 문제 유형 파악
  2. 알고리즘, 평가 방법 선택
  3. 적합한 함수를 사용해 모델링

 

3. 관련 용어

모델

  • 데이터로부터 패턴을 찾아 수학식으로 정리해 놓은 것

모델링

  • 오차가 적은 모델을 만드는 과정

모델의 목적

  • 샘플을 가지고 전체를 추정
    • 샘플: 표본, 부분집합, 일부, 과거의 데이터
    • 전체: 모집단, 전체집합, 현재와 미래의 데이터
    • 추정: 예측, 추론

독립변수

  • Features, 원인, x

종속변수

  • Target, 결과, y

오차

  • 관측값(=실젯값)과 모델 예측값의 차이: 이탈도(Deviance)

데이터 셋을 학습용(Training), 검증용(Validation), 평가용(Testing) 데이터로 분리 함

 

과대적합(Overfitting)

  • 모델이 학습 데이터에 너무 맞춰져서 새로운 데이터에 대한 일반화 성능이 떨어지는 현상
  • 학습 데이터에 대해서만 잘 맞는 모델 - 실전에서 예측 성능이 좋지 않음

과소적합(Underfitting)

  • 모델이 너무 단순하여 학습 데이터에 적합하지 않는 현상
  • 모델이 학습 데이터의 패턴을 충분히 학습하지 못하여 학습 데이터와 새로운 데이터 모두에 대해 성능이 낮을 수 있음

 

4. 모델링 코드 구조

Scikit-Learn

# 학습용, 평가용 데이터 분리
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3) 

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, r2_score
# 1단계: 불러오기
# 회귀일 때
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error

# 분류일 때
# from sklearn.neighbors import KNeighborsClassifier
# from sklearn.metrics import accuracy_score

# 2단계: 선언하기
model = LinearRegression()

# 3단계: 학습하기
model.fit(x_train, y_train)

# 4단계: 예측하기
y_pred = model.predict(x_test)

# 5단계: 평가하기
print(mean_absolute_error(y_test, y_pred))
# print(accuracy_score(y_test, y_pred))

# 베이스라인
y_base = [y_train.mode()[0]] * len(y_test)
print(accuracy_score(y_test, y_base))

 

성능 평가

1. 회귀 모델 성능 평가

회귀 모델 평가

  • 0인지 1인지 예측
  • 예측 값이 실제 값에 가까울 수록 좋은 모델

 

y 실젯값 Target, 목표값
오차: 실젯값과 예측값의 차이(y - ŷ)
ŷ(y_hat) 예측값 새롭게 예측한 값
평균값보다 얼마나 잘 예측했을지(오차를 얼마나 더 줄였는지 )궁금
ȳ(y_bar) 평균값 이미 존재하고 있는 평균으로 예측한 값
최소한 평균값 보다는 실젯값에 가까운 예측값을 원함

 

MSE (평균 제곱 오차)

  • 예측값과 실제값 간의 차이(오차)를 제곱하여 평균화한 값

 

RMSE (평균 제곱근 오차)

  • 예측값과 실제값 간의 차이에 대한 평균화된 오차의 제곱근

 

MAE (평균 절대 오차)

  • 예측값과 실제값 간의 절대 차이의 평균

 

MAPE (평균 절대 백분율 오차)

  • MAPE는 예측값과 실제값 간의 백분율 오차의 평균

 

결정계수 (R-squared)

  • Coefficient of Determination
  • 전체 오차 중에서 회귀식이 잡아낸 오차 비율(일반적으로 0 ~ 1 사이)
  • 일반적으로 높은 값이 더 좋은 모델을 나타냅니다.

  • SSR (Regression Sum of Squares): 전체 오차 중에서 회귀식이 잡아낸 오차 
  • SST (Total Sum of Squares): 전체 오차(최소한 평균 보다는 성능이 좋아야 하니, 우리에게 허용된(?) 오차)

 

MSE, RMSE, MAE, MAPE는 오류(Error) 이므로 작을 수록 좋고 R2 Score는 클 수록 좋음

 

from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_absolute_percentage_error
from sklearn.metrics import r2_score

# 평가하기
# (실젯값, 예측값)
print('MSE:', mean_squared_error(y_test, y_pred))
print('MAE:', mean_absolute_error(y_test, y_pred))
print('RMSE:', mean_squared_error(y_test, y_pred, squared= False))
print('MAPE:', mean_absolute_percentage_error(y_test, y_pred))
print('R2:', r2_score(y_test, ypred))

 

2. 분류 모델 성능 평가

분류 모델 평가

  • 예측 값이 실제 값과 많이 같을 수록 좋은 모델

Confusion Matrix(오분류표)

  • TN(True Negative, 진음성): 음성으로 잘 예측한 것(음성을 음성이라고 예측한 것) 
  • FP(False Positive, 위양성): 양성으로 잘 못 예측한 것(음성을 양성이라고 예측한 것) 
  • FN(False Negative, 위음성): 음성으로 잘 못 예측한 것(양성을 음성이라고 예측한 것) 
  • TP(True Positive, 진양성): 양성으로 잘 예측한 것(양성을 양성이라고 예측한 것)

 

정확도(Accuracy, 정분류율)

 

정밀도(Precision)

 

재현율(Recall, 민감도(Sensitivity))

 

특이도(Specificity)

 

F1 - Score

  • 정밀도, 재현율의 조화 평균

 

# 함수 불러오기

from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
from sklearn.metrics import classification_report

# 평가하기

print(confusion_matrix(y_test, y_pred))
print('정확도:',accuracy_score(y_test,y_pred))
print('정밀도: ', precision_score(y_test, y_pred, average = None))
print('재현율: ', recall_score(y_test, y_pred, average = None))

 

한번에 평가!

728x90