티스토리 뷰

머신 러닝은 지도학습과 비지도학습으로 나뉘고, 지도학습은 두가지 모델로 나뉜다고 했다.

바로 분류(Classitication) 모델회귀(Regression) 모델이다.

 

지금까지 배워왔던 것은 모두 분류모델으로, 사전에 정해진 categorical 데이터 중에서 점수가 가장 높은 하나를 찾아서 output을 뽑아냈었다.

 

하지만 회귀 모델은 정해진 categorical 데이터가 없고, 연속적인 값을 추정하는 모델이다.

 

어떻게 하면 회귀 모델을 만들 수 있을까??

 

 

방법은 생각보다 매우 간단한데,,,

네트워크의 끝부분 레이어 몇개만 수정해주면 된다.

 

 

alexnet을 예시로 들면,

네트워크가 23번 fullyConnectedLayer -> 24번 SoftmaxLayer -> 25번 ClassificationOutputLayer 으로 이루어져있는걸 확인할 수 있다.

 

여기서 24번 Softmax 레이어는 삭제하고, 25번 레이어를 regressionLayer 으로 바꿔 끼워주기만 하면 분류 출력 모델이 회귀 출력 모델으로 짠 하고 변신이 된다.

 

 

 

결론) softmax 레이어를 삭제하고 마지막 레이어를 regressionLayer() 으로 배치하기만 하면 회귀모델을 만들 수 있다.

(전이학습을 하는 경우)

 

# 회귀모델의 성능평가는 어떻게 해야할까?

분류모델의 경우, GT값이 있기 때문에 맞았다/틀렸다 구분이 명확하다.

하지만 회귀모델의 경우, 연속적인 값 어딘가를 찍어야 하기 때문에 "얼마나" 틀렸는지가 성능평가의 중요한 척도가 된다.

 

여기서 가장 자주 사용하는 평가방식이 바로 RMSE(Root Mean Squared Error, 평균제곱근 오차)이다. 

Root(루트) + Mean(평균) + Squared(제곱) + Error(오차)

 

1. 실제 값 - 예측값 = 오차

2. 오차의 제곱 -> "음수 제거"

3. 오차의 제곱의 평균 ---> MSE(Mean Squared Error)

4. 오차의 제곱의 평균에 루트 ---> RMSE(Root MSE)

 

* MSE는 오차의 제곱을 곱하기 때문에 값이 너무 커질 수 있다. 0.001^2 = 0.000001 ㄷㄷ..

- 이를 좀 줄여주기 위해 루트를 씌워준게 RMSE인 것이다.

 

* MSE, RMSE는 낮을수록 성능이 좋다는 것을 뜻한다.

 

 

이를 사용해서 회귀모델을 예측하는 코드는 아래와 같다.

testPred = predict(net, testDs); % 예측값
testGT = testData.Price; % 실제값
err = testGT - testPred; % 오차
rmse = sqrt(mean(err.^2)) % RMSE, 요소곱을 하기 위해 '.'을 찍어줘야 한다
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함