AI/Machine Learning

[ML] 평균 제곱 오차, 교차 엔트로피 오차, 로그우도 계산 방법

운호(Noah) 2021. 11. 30. 23:34

평균 제곱 오차 (MSE, Mean Squared Error)

  • 추가 설명

    • yi 는 예측값, ti 는 정답값입니다.
  • 예제 코드

      import numpy as np
      from sklearn.metrics import mean_squared_error
    
      y_pred = np.array([0.001, 0.9, 0.001, 0.098])
      y_real = np.array([0, 0, 0, 1])
    
      # 평균제곱오차
      print(mean_squared_error(y_pred, y_real))
      print(((0.001-0)**2 + (0.9-0)**2 + (0.001-0)**2 + (0.098-1)**2)/4)

교차 엔트로피 오차(CEE, Cross Entropy Error)

  • 추가 설명

    • yi 는 예측값, ti 는 정답값입니다.
    • 해당 공식에서 ln 은 밑이 e 인 자연로그이므로, ln(x) = log(x) 입니다.
    • 교차 엔트로피와 이진 교차 엔트로피의 차이점
  • 예제 코드

      import numpy as np
    
      y_pred = np.array([0.001, 0.9, 0.001, 0.098])
      y_real = np.array([0, 0, 0, 1])
    
      # 교차 엔트로피
      def cross_entropy_error(y,t):
              # 로그 함수는 x = 0 에서 무한대로 발산하는 함수이기 때문에 x = 0 이 들어가서는 안된다.
              # 따라서, 매우 작은 값을 넣어 - 무한대가 나오는 것을 방지한다.
          delta = 1e-7
          return -np.sum(np.log(y+delta) * t)
    
      print(cross_entropy_error(y_pred, y_real))
      print(-(np.log(0.001+1e-7)*0 + np.log(0.9+1e-7)*0 + np.log(0.001+1e-7)*0 + np.log(0.098+1e-7)*1))

로그 우도 (Log Likelihood)

  • 추가 설명

    • 마지막 층의 활성화함수로 softmax 가 사용됐을 경우, 목적함수로 사용되기도 합니다.
    • 모든 노드를 고려하는 평균 제곱 오차나 교차 엔트로피와는 달리, 정답에 해당하는 노드만 확인합ㄴ다.
    • Oy 는 정답에 해당하는 노드의 예측값을 의미합니다.
  • 예제 코드

      import numpy as np
    
      y_pred = np.array([0.001, 0.9, 0.001, 0.098])
      y_real = np.array([0, 0, 0, 1])
    
      print(-np.log(0.098))

참고