[MLLifeCycle]Linear Regression and NN Classifier

조유솔·2024년 8월 13일
0
post-thumbnail

이미 알고 있는 내용은 최대한 배제하고, 다시 복습할 필요성이 있는 부분만 기재하였다.





1. LR의 4가지 가정 한줄 정리

  1. 선형성: 독립, 예측변수 사이에 선형적인 연관성이 있다.
  2. 정규성: 잔차가 정규분포를 따름 → 잔차 그래프보고 판단 가능
  3. 등분산성: 잔차의 분산이 동일 → 잔차 그래프보고 판단 가능
  4. 독립성: 관측값들이 서로 독립적 → 잔차 그래프보고 판단 가능
  • 단순선형회귀가 2차원 평면 위에 직선을 fit하는 거라면, 다중선형회귀는 3차원 공간 위에 평면을 fit하는 것



2. 모델 평가 지표

  • 자주 쓰이는 거
    • MAE: 절댓값 사용 - 단위가 종속변수와 동일하다는 장점 존재
    • MSE: 제곱 사용 - 오차가 클수록 더 큰 패널티를 부여



3. NN(KNN) Classifier

  • 가장 conventional한 classifier
  • 얘의 단점을 보완한 게 이제 neural net classifier
  • k : 가까이 있는 몇개의 점을 보고 분류할 것인가?

3-1. 작동방식

Train Phase

  • 딱히 할 게 없다. 그저 데이터위치-레이블 페어를 저장할 뿐(=Lazy Method)
  • 시간 복잡도 O(1) - 얘는 커도 된다.

Test Phase

  • 인풋 하나에 대해 모든 학습 데이터를 탐색. 가장 가까운 training example을 찾아야한다.
  • 그러기 위해서는 example간 유사도를 다 계산해야하는데 또 그러려면 distance 계산 후 가장 유사한 입력 데이터의 label을 출력해야하는 것

traditional NN Classifier의 한계
→ 당연히 연산 시간이 많이 소모될 수 밖에 없음
→ 이미지 분류 task에서 유사도 metric을 design하기는 어렵다(= metric과 metric사이의 유사도

  • 시간복잡도: O(n) - 얘는 크면 안된다. 근데 큼! 비효율적인 모델
    • 차원의 저주(course of dimension)
  • distance 라는 건 그 어떤 semantic한 정보도 포함하지 않음
    (그림이 갖고있는 어떠한 의미)

이미지(행렬) 사이의 유사도를 측정하는 Metric
L1
L2




3-2.구현 코드

import numpy as np  

class NearestNeighbor:  
    def __init__(self):  # 생성자 정의
        pass 
        
    def train(self, images, labels): # tain
        self.images = images  # # 입력받은 데이터-레이블 단순 저장
        self.labels = labels  

    def predict(self, test_image):  # prediction
        # 가정: 각 이미지가 1차원 벡터로 변환되어 있음
        min_dist = sys.maxint  # Python에서 최대 정수
        for i in range(self.images.shape[0]):  # 모든 학습 이미지 순회
            dist = np.sum(np.abs(self.images[i, :] - test_image))  # 학습-테스트 이미지 L1 계산
            if dist < min_dist:  
                min_dist = dist  # 최소 거리 갱신
                min_index = i  
        return self.labels[min_index]  # 레이블 반환

0개의 댓글