티스토리 뷰
회귀모델 성능평가지표 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 |