오늘은 선형 회귀모델 loss 방식
MSE, MAE, RMSE 에 대해서
탐색해보겠습니다.
1. 선형 회귀
이전포스팅에서
결정계수에 대해서 공부했었는데요,
결정계수 r2도 회귀 분석 모델의 평가지표였죠??
https://aigaeddo.tistory.com/15
11. 결정계수(R2) - Scikit Learn r2_score
오늘도 학원에서 학습한 내용을 꾸준히 블로그 글로 정리해서 올리려고 합니다 이번 포스트에서 정리해볼 내용은 "결정계수"입니다. 1. 결정계수(R2)가 뭐죠 결정계수는 바로 이것이라고 합니다.
aigaeddo.tistory.com
여기서 회귀분석에 대해서 알아는 봤는데,,
선형회귀는 뭘까요??
왠지 선형(직선) + 회귀가 될 것 같죠??
요 포스팅에서 일단 회귀모델에 대해서 학습해보죠!
https://www.appier.com/ko-kr/blog/5-types-of-regression-analysis-and-when-to-use-them
회귀분석 기법의 5가지 일반 유형과 각각의 활용 방법
회귀분석은 데이터 분석에 사용되는 매우 강력한 머신러닝 도구이다. 어떻게 작동하는지, 주요 유형에는 어떤 것들이 있는지, 그리고 비즈니스에 어떤 도움을 주는지 알아보자. 머신러닝에서
www.appier.com
" 회귀분석은 두 개 이상의 변수 사이에
유의미한 관계가 존재하는지 여부를 알려줄 뿐만 아니라
그 관계성에 대한 보다 구체적인 정보를 제공할 수 있다 "
"따릉이 대여횟수"를
예를 들어볼까요?
"따릉이의 대여 횟수"를 예측하는
모델을 만드는 경우
"온도" "습도" "시간""강수량" 등등의
영향을 받는다고 예상하면,
두 개 이상의 변수(일간 따릉이 대여 횟수, 온도,습도,시간,강수량 등) 사이의
여러 변수간의 상관관계를 아는게 목적이 될테고
회귀모델을 사용하는게 적합하군요!
그렇다면 선형회귀는 뭘까요??
"선형 회귀는 예측 변수와 종속 변수로 구성되며,
이 둘은 선형 방식으로 서로 연관지어져 있다. "
다시 따릉이 예로 돌아와보면
"온도" "습도" "시간" "강수량" 등의 예측 변수(독립변수)를 넣어
"따릉이 대여 횟수"의 종속변수로서의 값을
예상했죠.
그래서 이러한 형태를
선형 회귀모델로 구현해주었습니다.
(추가로 독립변수가 1개 이상이니 다중선형회귀가 됩니다.)
그럼 이어서 이 선형회귀에서
로스값를 구하는 평가방법을 알아보겠습니다.
2. 선형 회귀모델 평가 방법
MAE, MSE, RMSE, RMSLE
이 4가지 평가 방법을 살펴보겠습니다.
여러 수식이 있지만 말로 풀어 내겠습니다.
MAE(Mean Absolute Error/ 평균절대편차)
훈련한 회귀선과 실제 값의 차이를 절대 값을 씌워
양수로 만들고 이 차이를 다 더해서
데이터 수로 나눠준 것입니다.
MSE(Mean Squared Error/ 평균 제곱 오차)
앞의 MAE는 차이를 절대 값을 씌워
양수로 만들었죠?
이건 제곱을 해줘서 양수로 만듭니다.
(이전 R2를 공부할떄
나온 SSE를 n으로 나눠준
게 MSE 됩니다.)
값이 크니 MAE 보다 이상치에 민감합니다.
또, 오차가 0과 1 사이인 경우에,
MSE에서 그 오차는 본래보다 더 작게 반영하고
오차가 1보다 클 때는 본래보다 더 크게 반영합니다.
RMSE(Root Mean Squared Error) = 평균 제곱근 오차
MSE에 루트를 씌워준 방식입니다.
MSE의 민감함과
범위에 따른 오차 차이가 큰 점을 보완할 수 있습니다.
(다만 그래도 MAE보다는 이상치에 대해 민감하다고 하네요)
3. 사용해보기
1. 모델 세팅 및 훈련 로스 확인
첫번째는 model에 compile방식에서
loss파라미터에 모델평가 도출할 방식을 선택 해줘야 합니다.
이러면 모델이 해당 모델 평가 방식을 이용해서 loss를 줄여가면서
훈련을 하게될 겁니다!
또한 fit()시 터미널 로그에
loss 기록을 확인할 수도 있습니다.
#mae
model.compile(loss='mae', optimizer='adam')
#mse
model.compile(loss='mse', optimizer='adam')
#rmse 는 mse로 훈련
loss 방식에 대한 건 아래 도큐먼트를 참고하세요.
https://www.tensorflow.org/api_docs/python/tf/keras/losses
Module: tf.keras.losses | TensorFlow v2.15.0.post1
signature_constants
www.tensorflow.org
2. 평가 loss값 찍어보기
평가할때 loss 값을 구할때 위와 같이 직접 구현하지
않을 수 있도록 도와주는 선생님이 계십니다.
(위 도큐먼트를 보니 keras에서도 사용할 수 있었던 것 같은..?)
갓 Scikit Learn 선생님의 metrix 모듈입니다.
이전 포스팅의 r2_score에서도 소개했었죠??
https://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics
API Reference
This is the class and function reference of scikit-learn. Please refer to the full user guide for further details, as the class and function raw specifications may not be enough to give full guidel...
scikit-learn.org
metrics 모듈은
각 모델의 평가지표, 스코어 등의 기능을 제공한다고 합니다.
이 중 회귀(regression)모델에 대한 metrics를 사용하겠습니다.
이 중에서
metrics.mean_absolute_error()
metrics.mean_squered_error()
란 함수가 있네요!
근데 RMSE는 보이지가 않네요..
역시 직접 mse에 루트를 씌워줘서 도출해야합니다.
사용해보겠습니다.
sklearn.metrics 모듈의
mean_absolute_error
mean_squared_error 함수를 일단 import 하겠습니다.
#y_test, x_test의 평가데이터
#model은 훈련을 끝냄
#y_predict 는 훈련을 마친 모델에 x_test를 넣어 얻어낸 예측값.
y_predict = model.predict(x_test)
from sklearn.metrics import mean_absolute_error, mean_squared_error
1) MAE
#MAE
mae_loss = mean_absolute_error(y_test, y_predict)
2.MSE
#MSE
mse_loss = mean_squared_error(y_test, y_predict)
3.RMSE
#RMSE
import numpy as np
rmse_loss = np.sqrt(mean_squared_error(y_test, y_predict))
#numpy의 sqrt라는 함수로 루트를 씌워줌.
'인공지능 개발하기 > Machine Learning' 카테고리의 다른 글
[Tensorflow] 17. loss 값 시각화 해보기 (1) | 2024.01.13 |
---|---|
[Tensorflow] 16. 데이터쪼개기 2) validation data (1) | 2024.01.13 |
[Tensorflow] 14. 데이콘(Dacon) 연습 대회 참가하기 (2) | 2024.01.09 |
[Tensorflow] 13. csv 파일 데이터 다루기(pandas 패키지) (0) | 2024.01.08 |
[Tensorflow] 12. 연습용 데이터 사용해보기 Scikit Learn datasets (1) | 2024.01.07 |