웹사이트 검색

Python의 손실 함수 - 쉬운 구현


Python의 손실 함수는 모든 기계 학습 모델의 필수적인 부분입니다. 이 함수는 모델의 예측된 출력이 실제 출력과 얼마나 다른지 알려줍니다.

이 차이를 계산하는 방법에는 여러 가지가 있습니다. 이 튜토리얼에서 우리는 좀 더 대중적인 손실 함수를 살펴볼 것입니다.

이 튜토리얼에서는 다음 네 가지 손실 함수에 대해 논의할 것입니다.

  1. 평균 제곱 오차
  2. 평균 제곱근 오차
  3. 평균 절대 오차
  4. 교차 엔트로피 손실

이 4개의 손실 함수 중 처음 3개는 분류 모델에 적용할 수 있습니다.

Python에서 손실 함수 구현

Python에서 이러한 손실 함수를 구현하는 방법을 살펴보겠습니다.

1. 평균 제곱 오차(MSE)

평균 제곱 오차(MSE)는 예측과 실제 관찰 간의 차이 제곱의 평균으로 계산됩니다. 수학적으로 다음과 같이 나타낼 수 있습니다.

MSE에 대한 Python 구현은 다음과 같습니다.

import numpy as np
def mean_squared_error(act, pred):

   diff = pred - act
   differences_squared = diff ** 2
   mean_diff = differences_squared.mean()
   
   return mean_diff

act = np.array([1.1,2,1.7])
pred = np.array([1,1.7,1.5])

print(mean_squared_error(act,pred))

출력 :

0.04666666666666667

sklearn의 mean_squared_error를 사용하여 MSE를 계산할 수도 있습니다. 기능 작동 방식은 다음과 같습니다.

from sklearn.metrics import mean_squared_error
act = np.array([1.1,2,1.7])
pred = np.array([1,1.7,1.5])
mean_squared_error(act, pred)

출력 :

0.04666666666666667

2. 평균 제곱근 오차(RMSE)

평균 제곱근 오차(RMSE)는 평균 제곱 오차의 제곱근으로 계산됩니다. 수학적으로 다음과 같이 나타낼 수 있습니다.

RMSE에 대한 Python 구현은 다음과 같습니다.

import numpy as np
def root_mean_squared_error(act, pred):

   diff = pred - act
   differences_squared = diff ** 2
   mean_diff = differences_squared.mean()
   rmse_val = np.sqrt(mean_diff)
   return rmse_val

act = np.array([1.1,2,1.7])
pred = np.array([1,1.7,1.5])

print(root_mean_squared_error(act,pred))

출력 :

0.21602468994692867

sklearn의 mean_squared_error를 사용하여 RMSE도 계산할 수 있습니다. 동일한 기능을 사용하여 RMSE를 구현하는 방법을 살펴보겠습니다.

from sklearn.metrics import mean_squared_error
act = np.array([1.1,2,1.7])
pred = np.array([1,1.7,1.5])
mean_squared_error(act, pred, squared = False)

출력 :

0.21602468994692867

매개변수 'squared'가 True로 설정되면 함수는 MSE 값을 반환합니다. False로 설정하면 함수는 RMSE 값을 반환합니다.

3. 평균 절대 오차(MAE)

Mean Absolute Error(MAE)는 예측과 실제 관찰 간의 절대 차이의 평균으로 계산됩니다. 수학적으로 다음과 같이 나타낼 수 있습니다.

MAE에 대한 Python 구현은 다음과 같습니다.

import numpy as np
def mean_absolute_error(act, pred):
    diff = pred - act
    abs_diff = np.absolute(diff)
    mean_diff = abs_diff.mean()
    return mean_diff

act = np.array([1.1,2,1.7])
pred = np.array([1,1.7,1.5])
mean_absolute_error(act,pred)

출력 :

0.20000000000000004

sklearn의 mean_absolute_error를 사용하여 MAE를 계산할 수도 있습니다.

from sklearn.metrics import mean_absolute_error
act = np.array([1.1,2,1.7])
pred = np.array([1,1.7,1.5])
mean_absolute_error(act, pred)

출력 :

0.20000000000000004

4. Python의 교차 엔트로피 손실 함수

Cross-Entropy Loss는 Negative Log Likelihood라고도 합니다. 이것은 분류 문제에 가장 일반적으로 사용됩니다. 분류 문제는 예를 둘 이상의 클래스 중 하나에 속하는 것으로 분류하는 문제입니다.

이진 분류 문제의 경우 오류를 계산하는 방법을 살펴보겠습니다.

모델이 개와 고양이를 분류하려고 하는 분류 문제를 생각해 봅시다.

오류를 찾는 파이썬 코드는 다음과 같습니다.

from sklearn.metrics import log_loss
log_loss(["Dog", "Cat", "Cat", "Dog"],[[.1, .9], [.9, .1], [.8, .2], [.35, .65]])

출력 :

0.21616187468057912

우리는 sklearn의 log_loss 방법을 사용하고 있습니다.

함수 호출의 첫 번째 인수는 각 입력에 대한 올바른 클래스 레이블 목록입니다. 두 번째 인수는 모델에서 예측한 확률 목록입니다.

확률은 다음과 같은 형식입니다.

[P(dog), P(cat)]

결론

이 튜토리얼은 Python의 손실 함수에 관한 것입니다. 회귀 및 분류 문제 모두에 대해 서로 다른 손실 함수를 다루었습니다. 저희와 함께 즐겁게 배우셨기를 바랍니다!