이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[Data Science] Regression & Classification

  • 2026.03.07 19:55
  • Computer Science/Data Science
반응형

 

 

 

머신러닝에서 이미 공부한 내용이지만 간단하게 훑어보고 넘어가자. 

 

 

 


 

 

 

 

 

 

 

Regression 에서 Model은 그냥 함수로 생각하면 됨. Constant Model은 평균값을 뱉어내는 함수로 보면 된다.

저기서 Theta는 Parameter로, 데이터를 통해 추정하는 값이다.

 

중력가속도 g도 사실 계산을 통해 얻은 값이니 Parameter라고 볼 수 있음. 

수식에서 x y 값은 그냥 주어지는 값이니까 Parameter가 아니다. 저기서는 x y 값이 Constant.

 

Theta에 hat이 붙어있으면 Estimated Parameter로 Best Fit한 Parameter라고 보면 됨. 

hat이 붙어있지 않으면 Model Parameter. 

 

모델링 과정은 크게 4가지로 구분된다. 

 

1. Choose a Model

Constant Model은 항상 같은 값을 출력할거고.. Linear Model은 직선 형태고.. Polynomial Model은 곡선 형태일거고.. 

도메인 지식이나 데이터 시각화를 참고해서 적절한 모델을 선택한다. 

 

2. Choose a Loss Function

Loss Function은 Theta hat이 얼마나 틀렸는지를 측정하는 함수.

즉, Model을 판단하는 Metric을 의미한다. 

 

잘 맞추면 낮은 값을, 잘 못 맞췄으면 높은 값을 부여해 모델을 평가함.

Loss는 틀린 정도를 의미하기에 작을수록 좋은 모델이다.

 

여러 가지 Loss Function이 있음.

 

 

 

 

L2 Loss (MSE), L1 Loss (MAE) ...

L2 Loss는 오차를 제곱하기에 이상치에 매우 민감하고, L1 Loss는 절댓값이라 이상치의 영향이 상대적으로 작다.

 

Training Data로 오차를 최소화하는 Theta Hat을 결정하고

Validation Data로 Loss Function, 모델 구조, HyperParameter 튜닝 등을 결정하고 

Test Data로 최종 성능을 확인한다.

 

경험상 MSE를 사용하면 큰 문제가 없다고 함.. 여러 Loss를 혼합해서 사용할 때는 Absolute Loss를 사용하는 편.

 

 

3. Fit the Model

Fitting은 Loss Function을 최소화하는 Theta Hat을 찾는 과정이다. 

아까도 말했듯 Loss Function의 입력은 Theta이고, x y 는 Constant.

 

최소화 할 때는 당연히 미분해서 0이 되는 지점을 찾는 방식을 사용한다.

 

 

4. Evaluate Model Performance

Evaulation은 학습된 모델이 얼마나 잘 Fitting 됐는지 확인하는 작업이다. 

MSE에 루트를 씌운 RMSE를 쓰면 원래 데이터와 단위가 같아져 해석이 편함. 

 

평균적으로 예측값이 원래 값보다 얼마나 벗어났는지를 나타낸다.

 

Residual을 구하고 시각화하면 모델의 문제점을 파악할 수 있음.

시각화 했을 때 무작위로 잘 퍼져있다면 잘 Fitting 됐음을 의미하고, 특정 패턴이 보이면 모델이 데이터 구조를 잘 못 잡고 있는것.

 

데이터는 실제 패턴과 노이즈로 구성되고, 잔차는 모델이 못 잡은 부분과 노이즈로 구성된다.

그러니 패턴이 있다는 건 아직 잡지 못한 구조가 남아있다는거임.

 

 

 


 

 

 

 

Simple Linear Regression은 Feature가 1개고, Multiple Linear Regression은 Feature가 여러 개로 구성된다. 

그런데 Feature가 여러 개라고 해도 Theta에 대해서는 여전히 Linear하기에 Linear Regression.

 

4단계로 구성되는건 똑같은데, 수식이 행렬로 바뀌면서 기하학적 해석만 조금 달라짐.

Loss Function은 L2 Loss의 제곱으로 표현할 수 있고, Fitting에서는 Subspace와 Projection이 적용되어 수식이 조금 달라짐.

당연히 오버피팅이 발생할 수 있으니 Feature가 늘어날수록 모델이 무조건 좋아지지는 않는다. 

 

 

 


 

 

 

실제 계산은 모두 비선형적으로 연결되어있고, 단순하게 최적화 할 수 없다.

그러니 Gradient Descent를 사용함. 오차의 최소를 찾아가는 방식으로, 이미지 보면 직관적으로 이해할 수 있음. 

 

 

 

 

 

Global 값을 찾을 수는 없다. Local Minimum을 찾는게 다임.

기울기에 비례해서 움직이되, Learning Rate로 스케일을 조절함.

 

Learning Rate Scheduling 을 사용해서 알파 값을 조작하는데.. 이거 관련해서는 휴리스틱하게 찾아가는 편.

 

Convex 하다면 Local 값이 Global 값임을 보장할 수 있지만, Non-Convex 하더라도 충분히 성능이 좋기에 그 부분이 크게 중요하지는 않다.

 

Parameter가 여러 개면 각각 편미분하고 동시에 처리한다.

 

Batch Gradient Descent에서 Theta를 한 번 업데이트 하려면 n개 데이터 전부의 Gradient를 모두 더해야 한다.

n이 100만이면? 업데이트 한 번 할때 100만번 계산해야 하는 것.. 너무 너무 비효율적이다.

 

그러니 Mini Batch Stochastic Gradient Descent를 사용함.

우선 Mini Batch는 데이터를 잘라내고 각 set마다 Theta를 업데이트 하는데 사용하는 방식이고, Stochastic은 잘라낸 덩어리를 순서대로 자르지 않고 무작위로 섞어서 구성하는 방식이다.

 

이렇게 하면 노이즈가 있을텐데 학습이 제대로 될까? 

잘 된다고 함.. 오히려 Non-Convex 에서 Local Minimum을 탈출하는데 도움이 될 때도 있고 .. 

 

 

 


 

 

 

Linear Regression은 연속적인 숫자를 예측한다. 

카테고리를 예측해야 할 때는 Classification을 사용하는데, Regression으로 Classification을 수행하기 위해 Regression 값을 0~1 사이의 확률값으로 변환해서 Classification에 사용한다. 그리고 이걸 Logistic Regression 이라고 부름.

 

사실 Regression이나 Classification이나 계산 구조는 같음. 출력이 실수인지 카테고리인지만 다르다.

확률값 변환만 해주면 그냥 같은 문제.

 

어떻게 확률값으로 변환함? 

 

1. Odds 

p가 확률이라고 치면 Odds를 p / (1-p) 로 정의할 수 있음

이 값의 범위는 0 ~ 무한 

 

2. Logit (Log-Odds)

Odds 에다가 로그 씌우면 됨. 이러면 범위가 -무한 ~ +무한으로 바뀐다.

 

3. Sigmoid (Logit의 역함수)

p 에 대해서 식을 풀어주면 0 ~ 1 사이 확률을 반환하는 이쁜 함수가 나옴 

이 함수를 활용하면 Real Value를 통해 확률값을 얻을 수 있다.

 

 

 

 

입력 피쳐 받고 계산하고.. Non Linear한 시그모이드를 거쳐서 확률값을 뱉는 과정임.

 

Loss Function으로는 MSE 대신 Cross-Entropy Loss를 사용한다.

Sigmoid와 MSE를 조합하면 Loss Surface가 Non-Convex 하게 되니 Gradient Descent로 Global 값을 찾는게 어려워진다. 

 

애초에 CE Loss 자체는 Convex하고, n개를 평균낸 Empirical Risk도 Convex 상태를 유지함.

 

 

 

 

y가 1일 때는 p가 0에 가까울수록 loss가 폭발적으로 커진다.

틀렸을 때 강하게 페널티를 준다는 것. 

 

이 CE Loss를 최소화하는건 결국 MLE와 수학적으로 동치임. (식정리 잘 해보면 알 수 있음)

즉, 데이터가 주어졌을 때 이 데이터가 나올 확률을 최대화하는 Theta를 찾는게 결국 Cross Entropy Loss를 최소화하는 Theta를 찾는거랑 같은 문제이다.

 

그런데 데이터가 Linear Separable하면 Theta를 무한히 키울수록 Loss가 계속 작아진다.

이러면 최솟값이 없으니 학습이 안됨.. 

 

Linear Separable 하다는거는 데이터를 분류하는 하나의 선이 있다는건데, Separable 데이터에서는 Theta가 클수록 Sigmoid가 Step Function처럼 변한다. 

이러면 Loss를 최소화하는 Theta가 무한이라는거임; 그 값에 도달할 수 없으니 Gradient Descent가 멈추지 않고 Theta를 키우면서 발산하게 된다.

 

그러니 Loss 값에 가중치 제곱합을 추가하는 L2 Regularization을 사용한다.

 

 

 

 

Theta가 너무 커지더라도 Regularization 항이 페널티를 주기에 Theta 크기가 제한된다.

 

 


 

 

 

모델을 평가할 때 Accuracy만 보는건 문제가 된다.

스팸메일 분류할 때 스팸 5개 정상95개 데이터에서 전부 정상이라고만 해도 Accuracy가 95%가 나옴.

 

그러니 Confusion Matrix 그려서 Precision, Recall, ROC Curve, AUC 를 사용해 모델을 종합적으로 평가함.

수식 외우지 말고 이해하기 

 

 

 

 

반응형
저작자표시 (새창열림)

'Computer Science > Data Science' 카테고리의 다른 글

[Data Science] Decision Tree & Regularization  (0) 2026.03.14

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Data Science] Decision Tree & Regularization

    [Data Science] Decision Tree & Regularization

    2026.03.14
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (685)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (145)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Data Science (2)
      • Embedded Software (1)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
      • BlockChain (0)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (12)
    • 💬 기록 (8)
    • 📚 공부 (7)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바