회귀 모델 추가 코딩- 데이터 분리
- Validation 추가
- train_test_split
1. 데이터셋 생성하기- 학습 데이터
- 검증 데이터
- 테스트 데이터
- 사이킷 런에 잘 구현된 train_test_split 함수 를 이용해서 데이터를 효율적으로 잘라냄
- test_size=0.4 : 테스트 사이즈가 40%라는 의미 (train : 60%, test : 40%)
- suffle : 데이터를 섞을 것인지 선택 - 일반적으로 shuffule을 사용하면 결과가 더 좋음
- train : val : test - 6:2:2 로 설정
2. 모델 구성하기- Dense 레이어가 두 개인 다층퍼셉트론 모델.
- 첫 번째 레이어는 5개의 뉴런을 가진 Dense 레이어
- 오류역전파가 용이한 relu 활성화 함수를 사용.
- 두 번째 레이어는 3개의 뉴런을 가진 Dense 레이어
- 출력 레이어인 세 번째 레이어는 하나의 수치값을 예측을 하기 위해서 1개의 뉴런을 가지며, 별도의 활성화 함수는 relu를 사용
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 5) 10
_________________________________________________________________
dense_1 (Dense) (None, 3) 18
_________________________________________________________________
dense_2 (Dense) (None, 4) 16
_________________________________________________________________
dense_3 (Dense) (None, 1) 5
=================================================================
Total params: 49
Trainable params: 49
Non-trainable params: 0
_________________________________________________________________
3. 모델 학습과정 설정하기모델 컴파일- 모델을 실행시키지 전에 머신이 이해할 수 있도록 컴파일 시킴
- loss : 손실 마수는 어떤 것을 사용할 것인가? --> mse
- optimizer : 최적화 함수는? --> adam, rmsprop
- metrics : 어떤 방식? --> accuracy, mse(mean squared error) 적용
4. 모델 학습시키기- epochs : 훈련 횟수
- batch_size : 몇 개씩 끊어서 작업을 할 것인가를 의미
- batch_size를 크게 잡을 경우 속도가 빨라지지만 정확도가 떨어짐
- 작게 잡을 경우 속도는 떨어지지만 정확도는 올라감
- valication_data : 검증 데이터
Train on 60 samples, validate on 20 samples
Epoch 1/1000
60/60 [==============================] - 1s 10ms/sample - loss: 614.3070 - mse: 614.3071 - val_loss: 2238.0100 - val_mse: 2238.0100
Epoch 2/1000
60/60 [==============================] - 0s 2ms/sample - loss: 268.8606 - mse: 268.8605 - val_loss: 705.9375 - val_mse: 705.9374
...
Epoch 999/1000
60/60 [==============================] - 0s 2ms/sample - loss: 1.0154e-11 - mse: 1.0154e-11 - val_loss: 5.5297e-11 - val_mse: 5.5297e-11
Epoch 1000/1000
60/60 [==============================] - 0s 2ms/sample - loss: 7.3542e-12 - mse: 7.3542e-12 - val_loss: 7.2760e-13 - val_mse: 7.2760e-13
20/20 [==============================] - 0s 1ms/sample - loss: 5.8208e-12 - mse: 5.8208e-12
loss : 5.820766091346741e-12
mse : 5.820766e-12
결과물 :
[[ 65.00001]
[ 80. ]
[ 91. ]
[ 66. ]
[ 62. ]
[ 96. ]
[ 64. ]
[ 89. ]
[ 92. ]
[100. ]
[ 93. ]
[ 86. ]
[ 84.99999]
[ 78. ]
[ 70. ]
[ 75. ]
[ 69. ]
[ 73. ]
[ 84. ]
[ 97. ]]
RMSE 구하기- 평균 제곱근 오차 - RMSE(Root Mean Squared Error)
- 회귀 분석을 평가할 때 가장 많이 사용하는 지표 중에 하나
- MSE에 루트를 사용
- 원래 데이터에서 평균을 뺀 값을 제곱하여 모두 더한 뒤 전체 개수로 나눈 값에 루트를 씌운 것
- RMSE는 낮을수록 정밀도가 높음
RMSE : 2.412626388678268e-06
R2 구하기- 결정 계수(R2)
- 회귀 분석에서 많이 사용하는 지표 중에 하나
- RMSE와 반대로 높을수록 좋은 지표
- 0~1사이의 수치 - 0.73 정도의 값이 나오면 73%의 설명력을 가진다고 해석
- 사이킷런에서 r2_score 함수로 제공
- 만약 R2의 값이 음수가 나오면 학습 시 머신에 뭔가 잘못된 부분이 존재한다는 의미
새로운 데이터로 예측 수행하기- x_predict에 새로운 값을 설정한 후 y_predict 값을 출력한다.
[[101. ]
[102. ]
[103. ]
[103.99999 ]
[105. ]
[105.99999 ]
[107. ]
[108. ]
[108.999985]
[110. ]]
|