개념/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하면 정규분포의 이론적 분위수와 실제 데이터의 잔차가 거의 똑같다는 걸 의미
- → 선형회귀에서의 정규성 만족! → 잔차가 정규분포를 따른다
위 그림에서는 직선을 잘 따르기는 하지만, 몇몇 이상치들이 존재함. (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) 일반적으로 설명 변수가 많아지면 모델이 더 많은 정보를 가지고 있어서 데이터를 더 잘 설명할 가능성이 높음. 그래서 이론적으로는 다중 선형 회귀의 R² 값이 단일 선형 회귀의 R² 값보다 크거나 같을 것이라고 기대할 수 있음. 하지만 실제로는 그렇지 않을 수 있음!!
2) 다중 공선성(multicollinearity)
- 다중 선형 회귀에서 여러 독립 변수들이 서로 강하게 상관되어 있는 경우, 이를 다중 공선성이라고 합니다. 다중 공선성이 있으면 모델의 안정성이 떨어지고 회귀 계수 추정치가 왜곡될 수 있음
- 다중 공선성은 모델의 예측 성능을 악화시킬 수 있으며, 이로 인해 다중 선형 회귀 모델의 R² 값이 예상보다 낮아질 수 있음
3) 모델의 복잡성과 과적합
- 다중 선형 회귀 모델은 독립 변수를 많이 포함할수록 복잡해짐. 하지만 모든 독립 변수가 종속 변수와 유의미한 관계를 가지는 것은 아님. 불필요한 변수가 포함되면 모델의 설명력이 오히려 떨어질 수 있음
- 복잡한 모델은 과적합(overfitting) 문제를 일으킬 수 있으며, 훈련 데이터에 대해서는 R² 값이 높을 수 있지만, 테스트 데이터에 대해서는 성능이 저하될 수 있음
4) 독립 변수와 종속 변수 간의 관계
- 단일 선형 회귀의 경우, 특정 독립 변수가 종속 변수와 매우 강한 선형 관계를 가질 수 있음. 이 경우 단일 선형 회귀의 R² 값이 매우 높을 수 있음
- 반면, 다중 선형 회귀에서 추가된 독립 변수들이 종속 변수와의 관계가 약하거나, 추가적인 설명력을 거의 제공하지 않는다면, 다중 선형 회귀의 R² 값이 단일 선형 회귀의 R² 값보다 낮을 수 있음
따라서, 다중 선형 회귀 모델이 항상 단일 선형 회귀 모델보다 R² 값이 높을 것이라고 단정할 수는 없음. 이는 모델의 적절성, 데이터의 특성, 다중 공선성, 그리고 독립 변수와 종속 변수 간의 관계에 따라 달라질 수 있음.
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.
'Naver AI Tech 7기 > LEVEL1' 카테고리의 다른 글
Week7 주간 학습정리 - [CV level 1 대회 정리] (1) | 2024.09.27 |
---|---|
Week6 주간 학습정리 - [CV 기초 프로젝트] (1) | 2024.09.13 |
Week5 주간 학습정리 - [CV 이론] (2) | 2024.09.06 |
Week4 주간 학습정리 - [CV 이론] (0) | 2024.08.30 |
Week1 주간 학습정리 - [PyTorch] (0) | 2024.08.05 |