티스토리 뷰

회귀모델 성능평가지표 R2

모델을 개발했을 때, loss값만으로 모델이 좋은지 나쁜지 평가할 수 없다. loss 값은 상대적이기 때문이다. 그렇기 때문에 R2 성능평가지표를 이용해 이 모델을 평가할 수 있다. (정확도를 평가하는 것은 accuraccy 모델 즉, 분류 모델이다.)

 

결정계수 R2란?

- 회귀 모델의 성과 지표

- 1에 가까울수록 좋은 회귀 모델, 0에 가까울 수록 나쁜 모델

- 음수가 나올 경우, 바로 폐기해야 하는 모델
- r2가 1에 가까울수록 loss값은 낮아진다.
- 분산 기반으로 예측 성능을 평가한다. 
- R 제곱 = 예측값 (y_predict) / 실제값 (y)

R2 코드 작성방법

from sklearn.metrics import r2_score
r2 = r2_score(y, y_predict)
print('r2스코어 : ', r2)

전체 코드

from tensorflow.keras.models import Sequential 
from tensorflow.keras.layers import Dense
import numpy as np
from sklearn.model_selection import train_test_split

#1. 데이터
x = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])
y = np.array([1,2,4,3,5,7,9,3,8,12,13,8,14,15,9,6,17,23,21,20])
x_train, x_test, y_train, y_test = train_test_split(x,y,
          train_size=0.7, shuffle=True, random_state=66)

#2. 모델구성
model=Sequential()
model.add(Dense(5, input_dim=1))
model.add(Dense(6))
model.add(Dense(5))
model.add(Dense(8))
model.add(Dense(1))
           
#3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')
model.fit(x_train, y_train, epochs=650, batch_size=1)

#4. 평가, 예측
loss = model.evaluate(x_test, y_test)
print('loss : ',loss)

y_predict = model.predict(x)
from sklearn.metrics import r2_score
r2 = r2_score(y, y_predict)
print('r2스코어 : ', r2)

https://github.com/junginee/study/blob/main/keras/keras07_R2_1.py

 

GitHub - junginee/study

Contribute to junginee/study development by creating an account on GitHub.

github.com


문제 해결하기

1.R2를 음수가 아닌 0.5 이하로 만들어라. (=좋지 않은 모델을 만들어라)
2.데이터는 건들이지 않는다.
3.레이어는 인풋, 아웃풋 포함 7개 이상
4.batch_size=1
5. 히든레이어의 노드는 10개 이상 100개 이하
6. train 70%
7. epoch 100번 이상
from tensorflow.keras.models import Sequential 
from tensorflow.keras.layers import Dense
import numpy as np
from sklearn.model_selection import train_test_split

#1. 데이터
x = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])
y = np.array([1,2,4,3,5,7,9,3,8,12,13,8,14,15,9,6,17,23,21,20])
x_train, x_test, y_train, y_test = train_test_split(x,y,
          train_size=0.7, shuffle=False, random_state=50)

#2. 모델구성
model=Sequential()
model.add(Dense(2, input_dim=1))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(100))
model.add(Dense(1))

           
#3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')
model.fit(x_train, y_train, epochs=100, batch_size=1)

#4. 평가, 예측
loss = model.evaluate(x_test, y_test)
print('loss : ',loss)

y_predict = model.predict(x)
from sklearn.metrics import r2_score
r2 = r2_score(y, y_predict) #R 제곱 = 예측값 (y_predict) / 실제값 (y)
print('r2스코어 : ', r2)

 

결과
loss :  28.602506637573242
r2스코어 :  0.4791184589890901

 

평가하기
(1)레이어 수가 많을수록, (2)한 레이어 당 노드 수가 많을수록 나쁜모델이 구현되었다.


https://github.com/junginee/study/blob/main/keras/keras07_R2_2_bad.py

 

GitHub - junginee/study

Contribute to junginee/study development by creating an account on GitHub.

github.com

 

'Artificial Intelligence > Deep Learning' 카테고리의 다른 글

[DL] R2 예제_california  (1) 2022.06.23
[DL] R2 예제_boston  (0) 2022.06.23
[DL] 스칼라, 벡터, 메트릭스, 텐서  (0) 2022.06.20
[DL] batch 작업  (0) 2022.06.20
[DL] MSE, MAE, RMSE  (0) 2022.06.17
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/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
글 보관함