Naver AI Tech 7기/LEVEL1

Week2 주간 학습정리 - [ML LifeCycle]

지혜의 시작 2024. 8. 16. 18:54
728x90
개념/code 학습 중 생긴 이슈 및 해결 방법에 대해 기록하자

개념 Issue & Solution

 

1. 선형 회귀 '정규성' 가정

Issue : 그래프 해석이 헷갈림

  • 정규성 : 회귀 모델의 잔차(residuals) or 오류가 정규 분포를 따르는지 확인
  • 잔차들이 정규 분포를 따를 경우, 점들이 대각선에 가깝게 위치 -> WHY?
  • 잔차 : 오차의 추정치 : residual ; 예측값과 실제 ground truth (실제 값) 의 차이
  • 시각화하는 방법 중 하나가 바로 Q-Q (Quantile-Quantile) 플롯
  • Q-Q 플롯이란?
    • Q-Q 플롯은 두 개의 확률 분포를 비교하는 그래프
    • 선형 회귀 분석에서는 보통 잔차의 분포를 정규 분포와 비교하기 위해 사용됨
    • 잔차가 정규 분포를 따른다면, Q-Q 플롯에서 점들이 대각선에 가까이 위치해야 함
  • 그래프의 구성 요소
    • X축 (이론적 분위, Theoretical Quantiles)
    • X축은 정규 분포의 분위수(quantiles)를 나타냄. 이는 정규 분포에서 특정 확률에 해당하는 값을 의미. 예를 들어, 분위수 0.25는 아래쪽 25%에 해당하는 값.
    • Q-Q 플롯에서 X축은 "이론적으로 기대되는 정규 분포에 따른 값"을 나타냄
    • Y축 (표본 분위, Sample Quantiles)
    • Y축은 실제 데이터(잔차)의 분위수를 나타냄. 이는 실제 관측된 잔차가 해당 분위에 어떤 값을 가지고 있는지를 나타냄.
    • Y축은 "실제로 관측된 데이터에서의 잔차 값"
    • 직선 (45도 대각선, Reference Line)
    • Q-Q 플롯에서 대각선은 이론적 정규 분포와 일치하는 기준선을 나타냄
    • 이 선은 정규 분포를 따를 경우, 잔차의 분위수들이 이 이론적 분위수와 얼마나 잘 일치하는지를 나타냄. 즉, 잔차가 정규 분포를 따른다면 모든 점들이 이 직선에 가까이 위치해야 함.
    • 점들이 대각선에 가까울수록 잔차의 분포가 정규 분포에 가깝다는 의미
  • 왜 점들이 대각선에 가까워야 하는가?
    • 대각선에 가까운 점들: 잔차가 정규 분포를 잘 따르고 있음을 의미. 즉, 모델이 적절하게 적합되었을 가능성이 높음.
    • 대각선에서 벗어난 점들: 잔차가 정규 분포에서 벗어나 있음을 나타내며, 모델에 문제가 있을 수 있음을 시사. 예를 들어, 잔차의 분포가 왜곡되었거나, 극단값(outliers)이 존재할 수 있음.
  • 직선 (45도 대각선, Reference Line) → 45도 이어야 y=x
  • x축이 정규분포의 이론적 분위수고 y축이 실제 데이터의 잔차니까 y=x 의 직선에 점들이 잘 fit하면 정규분포의 이론적 분위수와 실제 데이터의 잔차가 거의 똑같다는 걸 의미
  • → 선형회귀에서의 정규성 만족! → 잔차가 정규분포를 따른다

https://wikidocs.net/142640

위 그림에서는 직선을 잘 따르기는 하지만, 몇몇 이상치들이 존재함. (reference : https://wikidocs.net/142640)

 

2. Train Time Complexity & Prediction(예측) Time Complexity in NN Classifier

NN : Nearest Neighbor

  • lazy method
  • Train : 학습 과정에서는 단순히 input, output을 pair로 만들어서 저장, 기억 밖에 안함
  • prediction : test image가 들어왔을 때 test image를 전체 training data set과 비교 하면서 가장 가까운 training data set의 label을 출력하는 알고리즘!
  • prediction에서는 할 일이 많음
  • Train : O(1) & Predict : O(N) 의 시간 복잡도를 가짐
  • → bad!!
  • 사실 train time complexity는 커도 됨
  • 머신러닝 모델을 만들 때 훈련은 한 번 하고 예측은 그 훈련된 데이터를 가져와서 여러 번 할 수 있기 때문
  • 예측 time complexity는 최소화 하는 게 좋음!
  • → NN은 예측할 때 모든 TRAINING DATA를 봐야 함 → 상당히 비효율적
  • EX) 유튜브 추천 : 사람이 들어와서 비디오를 추천해줘 라고 하면, 수 억개의 비디오를 다 보고 test video와의 distance를 계산해서 가장 가까운 것을 예측, 즉 추천을 해야 함!!.. 비효율적..!
  • → 현업에서는 NN은 안 씀!!

3. 결정계수 R^2

수식

 

 

 

→ 결정계수가 1에 가깝다는 거는 1-()에서 ()안의 항이 0에 가깝다는 것

→ 실제값이랑 예측값이랑 거의 비슷할 때 0에 가까워짐 (분자의 값이 0에 가까워진다)

→ 실제값이랑 예측값이랑 거의 비슷하다는 거는 모델이 데이터를 잘 설명한다는 것!

→ 따라서 결정계수 값이 1에 가까울수록 모델이 실제 데이터를 잘 설명한다고 할 수 있음

 

  • 결정계수(R²)는 회귀 모델이 종속 변수의 변동성을 얼마나 설명하는지를 나타내는 지표
  • 0에서 1 사이의 값을 가지며, 값이 1에 가까울수록 모델이 데이터를 잘 설명하는 것을 의미
  • 이는 모델의 설명력을 평가하는 데 유용하며, 여러 모델 간의 성능을 비교할 때 많이 사용됨

4. '다중 선형 회귀의 결정계수(R²)가 단일 선형 회귀의 R²보다 항상 크다고 할 수는 없습니다'

→ 다중 선형 회귀 모델이 반드시 단일 선형 회귀 모델보다 데이터를 더 잘 설명한다고 보장할 수 없다는 의미

 

  • 단일 선형 회귀는 하나의 독립 변수(설명 변수)를 사용해 종속 변수(목표 변수)와의 관계를 모델링
  • 다중 선형 회귀는 여러 개의 독립 변수를 사용해 종속 변수와의 관계를 모델링

1) 일반적으로 설명 변수가 많아지면 모델이 더 많은 정보를 가지고 있어서 데이터를 더 잘 설명할 가능성이 높음. 그래서 이론적으로는 다중 선형 회귀의 값이 단일 선형 회귀의 값보다 크거나 같을 것이라고 기대할 수 있음. 하지만 실제로는 그렇지 않을 수 있음!!

 

 

2) 다중 공선성(multicollinearity)

  • 다중 선형 회귀에서 여러 독립 변수들이 서로 강하게 상관되어 있는 경우, 이를 다중 공선성이라고 합니다. 다중 공선성이 있으면 모델의 안정성이 떨어지고 회귀 계수 추정치가 왜곡될 수 있음
  • 다중 공선성은 모델의 예측 성능을 악화시킬 수 있으며, 이로 인해 다중 선형 회귀 모델의  값이 예상보다 낮아질 수 있음

3) 모델의 복잡성과 과적합

  • 다중 선형 회귀 모델은 독립 변수를 많이 포함할수록 복잡해짐. 하지만 모든 독립 변수가 종속 변수와 유의미한 관계를 가지는 것은 아님. 불필요한 변수가 포함되면 모델의 설명력이 오히려 떨어질 수 있음
  • 복잡한 모델은 과적합(overfitting) 문제를 일으킬 수 있으며, 훈련 데이터에 대해서는  값이 높을 수 있지만, 테스트 데이터에 대해서는 성능이 저하될 수 있음

4) 독립 변수와 종속 변수 간의 관계

  • 단일 선형 회귀의 경우, 특정 독립 변수가 종속 변수와 매우 강한 선형 관계를 가질 수 있음. 이 경우 단일 선형 회귀의   값이 매우 높을 수 있음
  • 반면, 다중 선형 회귀에서 추가된 독립 변수들이 종속 변수와의 관계가 약하거나, 추가적인 설명력을 거의 제공하지 않는다면, 다중 선형 회귀의 값이 단일 선형 회귀의  값보다 낮을 수 있음

따라서, 다중 선형 회귀 모델이 항상 단일 선형 회귀 모델보다 값이 높을 것이라고 단정할 수는 없음. 이는 모델의 적절성, 데이터의 특성, 다중 공선성, 그리고 독립 변수와 종속 변수 간의 관계에 따라 달라질 수 있음.

 

5. bias

input data를 보지 않고, input data에 영향을 주지 않고 여전히 output에 영향을 주는 파라미터

→ ex

→ training data(이미지) 에서 유독 고양이 데이터가 많다면 input이 뭐가 들어가던 상관없이 고양이일 확률이 높다. (training data가 고양이로 많이 이루어져 있으니까)

→ input을 보지 않고도 고양이라고 예측을 해버림

→ data distribution이 하나의 클래스만 집중적으로 분포(특정 클래스만 많이 가지고 있을 때)

→ 많이 있는 데이터로 bias를 잡아 줌으로써 실제 weight는 어떤 데이터 자체의 본성에 더 집중하게 디자인을 해주는 거임

bias는 픽셀 value와는 상관없는 데이터에 내재된 분포나 본성을 모델링하는 데 쓰임.

 

 

 

Code Issue & Solution

 

1. dZ1 = dA1 * (Z1 > 0)

Issue : ReLU Backpropagation 과정에서 ReLU 미분 값 코드 표현

  • (Z1 > 0)와 같은 표현은 NumPy 배열에서 조건문을 사용한 것처럼 동작
  • NumPy는 배열을 대상으로 하는 연산에서 브로드캐스팅과 같은 기능을 제공하여, 배열의 각 요소에 대해 조건을 평가하고 결과를 반환
  • Z1 > 0은 배열의 각 요소에 대해 비교 연산을 수행. 이 연산은 각 요소가 0보다 큰지를 확인한 후, 그 결과를 동일한 shape의 boolean 배열로 반환. 결과 배열은 각 요소에 대해 True 또는 False 값을 가짐.
    • True: 해당 요소가 0보다 큰 경우.
    • False: 해당 요소가 0보다 작거나 같은 경우.
  • NumPy에서는 조건에 따라 배열의 값을 선택하거나 조정할 때 (Z1 > 0)과 같은 표현을 많이 사용
  • True, False 에서 자동으로 1, 0 으로 변환되나?
    • YES, NumPy의 동작 방식 덕분
    • NumPy에서 True False는 실제로 1 0으로 취급
    • 따라서 이 Boolean 값을 숫자와 곱하면, True 1로, False 0으로 자동으로 변환
    • 이 방식으로 복잡한 조건문 없이 간단히 ReLU의 gradient를 계산할 수 있음
    • dA1 : 편미분 값 -> 숫자!

2. 

  

 

 

728x90