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) = 평균 제곱 오차, 연속형 데이터를 사용할 때 주로 사용 (주식 가격 예측 등)