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