TensorFlow
TensorFlow 기초 10 - 선형회귀분석 예제(예측, 결정계수)
코딩탕탕
2022. 11. 30. 10:10
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense
from keras import optimizers
import numpy as np
x_data = [1.,2.,3.,4.,5.] # feature
y_data = [1.2,2.0,3.0,3.5,5.5] # label
print('상관계수 :', np.corrcoef([x_data, y_data])) # 0.97494708
model = Sequential()
model.add(Dense(units=1, input_dim=1, activation='linear'))
model.compile(optimizer='sgd', loss='mse', metrics=['mse'])
# MSE(Mean Squared Error) = 평균 제곱 오차, 연속형 데이터를 사용할 때 주로 사용 (주식 가격 예측 등)
model.fit(x_data, y_data, batch_size=1, epochs=100, verbose=0)
print(model.evaluate(x_data, y_data))
pred = model.predict(x_data)
print('예측값 :', pred.flatten())
print('실제값 :', y_data)
# 결정계수(설명력, R2)
from sklearn.metrics import r2_score
print('결정계수(설명력) :', r2_score(y_data, pred)) # 0.9499884
import matplotlib.pyplot as plt
plt.plot(x_data, y_data, 'ro')
plt.plot(x_data, pred, 'b')
plt.show()
# 새로운 값으로 예측
new_x = [1.5, 2.5, 3.3]
print('예측결과 :', model.predict(new_x).flatten())
<console>
상관계수 : [[1. 0.97494708]
[0.97494708 1. ]]
1/1 [==============================] - ETA: 0s - loss: 0.1144 - mse: 0.1144
1/1 [==============================] - 0s 125ms/step - loss: 0.1144 - mse: 0.1144
[0.1144152283668518, 0.1144152283668518]
1/1 [==============================] - ETA: 0s
1/1 [==============================] - 0s 71ms/step
예측값 : [1.0985825 2.1144216 3.130261 4.1461 5.161939 ]
실제값 : [1.2, 2.0, 3.0, 3.5, 5.5]
결정계수(설명력) : 0.9466943593865802
1/1 [==============================] - ETA: 0s
1/1 [==============================] - 0s 29ms/step
예측결과 : [1.6065022 2.6223412 3.4350126]
tensorflow에서는 결정계수를 구하는 함수가 없으므로 sklearn을 활용하여 r2_score 함수를 사용하여야한다.

MSE(Mean Squared Error) = 평균 제곱 오차, 연속형 데이터를 사용할 때 주로 사용 (주식 가격 예측 등)
