SK Networks Family AI bootcamp 강의노트

18일차 [ 지도 학습 ]

HyunJung_Jo 2025. 2. 10. 16:23

 

 

Google Drive: 로그인

이메일 또는 휴대전화

accounts.google.com

 

1. 선형회귀 모델 평가 지표

선형회귀 모델이 딥러닝의 핵심이다.

  • R2 (결정계수) :0~1, 비율: 예측값과 평균의 차이의 제곱합 / 실제값과 평균의 차이의 제곱합 => 평균값에 대한 변동성 평가. 값 커질 수록 학습 잘 됨.
  • MSE(Mean Squred Error) : mean of squred error, 실제값과 예측값의 차이를 제곱합에 루트 씌우고 평균을 낸다. 손실함수, 이상치에 민감
  • RMSE (Root Mean Squared Error): MSE에 루트
  • RMSLE (Root Mean Squared Logarithmic Error) : 잔차 제곱합 평균에 로그, 값이 작을 수록 오류 적음
  • MAE (Mean Absolute Error): 실제값과 예측값 차이(이하 오차)의 절대값 합의 평균, rmse 보완
  • MAPE (Mean Absolute Percentage Error): 실제값에 대한 절대 오차 비율의 평균을 퍼센트로 표현 , 작을수록 좋다.
  • SMAPE(Symmetric Mean Absolute Percentage Error) : 오차/(실제값 절대값+오차값 절대값) 평균 합의 퍼센티지, 실제값 0 존재해도 계산 가능

2. 선형회귀 모델의 경사하강법

  • 선형회귀 모델 : y = wx +b , y:예측값, w: 가중치 , b: 절편
  • 손실함수 MSE 를 그래프로 그려보면 이차함수 그래프가 나온다.(x축 weight, y축 cost)
  • cost와 w을 미분하면 기울기가 나온다. (미분: 함수의 변화 측정법)
  • 기울기가 0이 되는 방향 = 이차함수 그래프 맨 아래 꼭짓점과 맞닿는 구간에 도달 => 최소의 cost


잠깐 방향성 잡는 한마디!

시키는 것만 하는 것이 아니라 끊임없이 사유하면서 개선점을 찾고 해결하는 것이 요즘 같은 LLM 시대에서 중요한 역량이다. 나는 좀 고생해도 사용자가 편한 방식으로 바꾸는 것이 실력 향상에도 도움이 된다. 예전엔 기계 사용설명서가 필요했지만 요즘은 두살배기도 스마트 폰 쓴다. 그만큼 사용성이 높아진 것이다. 토이프로젝트로 사용성을 높이는 경험을 해보자. 내 프로젝트에서 무엇이 부족한 지 스스로 정의하는 시간이 더 중요하다. 

https://www.youtube.com/watch?v=TzNQs85fL1w


  • learning rate (step size): step size에 맞춰서 w가 변화하면서 cost 계산, 작으면 오래 걸리고 크면 학습 안될 수도 있음. 
  • 코드 구현
W = np.random.uniform(-1, 1)
b = np.random.uniform(-1, 1)
learning_rate = 0.7

def plot_prediction(pred, y, W, b, fig, ax):
  ax.scatter(X, y)
  ax.scatter(X, pred)
  ax.set_title(f"W: {W:.2f} / b: {b:.2f}")

fig, axes = plt.subplots(4, 5, figsize=(20, 16))  # Create a 4x5 grid of subplots
fig.suptitle("Linear Regression with Gradient Descent", fontsize=16)  # Add an overall title

plot_index = 0

for epoch in range(200):
  Y_pred = W * X + b

  error = np.abs(Y_pred - Y).mean()
  if error < 0.001: # 오차 평균이 0.001 미만시 학습 완료
    break

  # gradient descent
  w_grad = learning_rate * ((Y_pred - Y)*X).mean()
  b_grad = learning_rate * ((Y_pred - Y)*1).mean()

  # W, b 값 업데이트
  W = W - w_grad
  b = b - b_grad

  if epoch % 10 == 0:
    Y_pred = W * X + b
    row = plot_index // 5  # Calculate subplot row index
    col = plot_index % 5   # Calculate subplot column index
    plot_prediction(Y_pred, Y, W, b, fig, axes[row, col])
    plot_index += 1
    if plot_index >= 20:  # Stop plotting after 20 plots
      break

plt.tight_layout()  # Adjust subplot spacing
plt.show()

 

3. 선형 회귀 모델 심층 탐구: 분석/정규화/모델 종류

  • 다중 선형 회귀 분석: 다차원 분석, y= w1x1 + w2x2+..+wnxn + b

정규화

  • regularization:  w가 너무 큰 값 가지지 않게 하여 모델 복잡도 낮추게 하는 방법
  • L2 regularization: (오차+가중치 제곱*학습률/2)의 평균  , 학습률 작게 하면 가중치 증가. 
  • Ridge : 선형 회귀에 L2 규제 적용, alpha는 정규화 강도.(낮추면 과대적합 가능성, 올리면 일반화)
  • L1 regularization: 가중치 절대값을 씀.
  • Lasso : 일부 피쳐 계수(w)가 0이 된다. 완전히 제외되는 특성 생겨, 모델 이해하기 쉬워짐. alpha값 변경시 가장 낮은 오차 찾는 반복횟수가 늘어나야 함.
미친듯이 피쳐를 찾아서 훈련데이터 오버피팅하고나서 하이퍼파라미터를 만져야 한다.

 

4. 분류 모델 평가 지표 

Confusion Matrix

  • 혼동행렬 > accuracy, precision, sensitivity(recall), f1-score, precision-recall trade-off, 1종 오류, 2종 오류
  • Accuracy 는 별로라 recall, precision, f1-score을 주로 쓴다.
평가지표 이름 Recall or Sensitivity, 재현율 혹은 민감도 Precision, 정밀도
  TPR  
공식 True Positive / Actual Positive
실제 양성을 얼마나 재현 했냐.
True Positive / Predicted Positive
얼마나 정확하게 양성 예측 했냐.
Type error 종류 FN, Type II error  FP, Type I Error
예시 스팸메일: 스팸인데 스팸이 아니다. 암진단. 암환자에게 암 아닌 정상이라고 예측
범인 체포. 일반인에게 범인이라고 예측
  • F1-Score은 정밀도와 재현도로 구성. 
  • precision-recall trade-off: 서로 상충하는 경우가 있음.

5. 이진 분류 : ROC, AUC

AUROC : Area under ROC curve

  • x축 FPR, y축 TPR 둘간의 관계 표현
  • x축 (actual negative중 FP) , y축 (actual positive중 TP)
from sklearn.metrics import roc_curve, auc

y_pred = modelV1.predict_proba(scaled_te)[:,1]
fpr, tpr, thresholds = roc_curve(y_te,y_pred)
auc_te = auc(fpr, tpr)
print(f'model: {auc_te}')


roc_curve는 이진 분류 모델의 성능을 평가하는 함수로, 다양한 임계값(threshold)에서의 false positive rate (FPR)과 true positive rate (TPR)을 계산하여 ROC 곡선을 생성합니다.

  • 임계값(threshold): 모델이 예측한 확률을 바탕으로 각 샘플을 양성(positive) 또는 음성(negative)으로 분류하는 기준입니다. 예를 들어, 확률이 0.5 이상이면 양성으로, 0.5 미만이면 음성으로 분류합니다. 이 임계값을 조정하면 모델의 FPR과 TPR에 영향이 미칩니다.
  • FPR (False Positive Rate): 실제 음성 샘플 중에서 잘못 양성으로 분류된 비율입니다. 임계값을 높이면 FPR은 줄어들지만, TPR도 줄어들 수 있습니다.
  • TPR (True Positive Rate): 실제 양성 샘플 중에서 올바르게 양성으로 분류된 비율입니다. 임계값을 낮추면 TPR은 증가하지만 FPR도 증가할 수 있습니다.

roc_curve 함수는 여러 임계값에 대해 이러한 FPR과 TPR을 계산하여 ROC 곡선을 그리는 데 필요한 데이터를 제공합니다. 이 곡선을 통해 다양한 임계값 설정에서 모델의 성능을 시각적으로 평가할 수 있으며, AUC(Area Under the Curve)를 통해 모델의 전반적인 성능을 수치적으로 판단할 수 있습니다.

 

predict_proba는 scikit-learn의 머신러닝 모델에서 사용되는 메서드로, 주어진 입력 데이터에 대해 각 클래스의 예측 확률을 반환합니다.

주요 기능 및 사용법:

  1. 예측 확률 반환: 이 메서드는 각 샘플이 특정 클래스에 속할 확률을 계산하여 배열 형태로 반환합니다. 예를 들어, 이진 분류 문제에서는 두 개의 클래스(양성 클래스와 음성 클래스)에 대한 확률을 각각 반환합니다.
  2. 출력 형식:
    • 반환된 배열은 각 샘플에 대해 클래스 0과 클래스 1에 대한 확률이 포함된 형태입니다. 예를 들어, [[0.2, 0.8], [0.9, 0.1]]은 첫 번째 샘플이 클래스 0일 확률이 20%, 클래스 1일 확률이 80%임을 의미합니다.
    • 이렇게 얻은 예측 확률을 기반으로 적절한 임계값(threshold)을 설정하여 최종 클래스를 결정할 수 있습니다.
  3. 용도:
    • predict_proba는 단순한 클래스 레이블 예측(predict method)보다 더 많은 정보를 제공하므로, ROC 곡선 그리기, 정밀도-재현율 곡선 그리기, 및 모델의 신뢰도 평가 등 다양한 성능 분석에 유용합니다.