개발일지/# 머신러닝
# 다중 선형 회귀 실습 Multi-variable linear regression
lution88
2022. 1. 9. 17:19
선형회귀 실습중 x데이터로 여러값들을 가지고 학습하는 경우
# 라이브러리 불러오기
## 라이브러리 불러오기
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam, SGD
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
# 데이터셋 csv 파일 불러오기
df = pd.read_csv('advertising.csv')
# 데이터셋 가공하기 x데이터= TV, Newspaper, Radio / y데이터 = Sales
x_data = np.array(df[['TV', 'Newspaper', 'Radio']], dtype=np.float32)
y_data = np.array(df['Sales'], dtype=np.float32)
# reshape : x데이터 (-1, 3) / y데이터 (-1, 1)
x_data = x_data.reshape((-1, 3))
y_data = y_data.reshape((-1, 1))
print(x_data.shape)
print(y_data.shape)
# 데이터셋을 학습데이터와 검증데이터로 분할하기 트레이닝셋 20%
x_train, x_val, y_train, y_val = train_test_split(x_data, y_data, test_size=0.2, random_state=2021)
print(x_train.shape, x_val.shape)
print(y_train.shape, y_val.shape)
# 모델은 sequential, dence 출력 1개 / loss는 mean_squared_error, optimizer는 Adam, lr 은 0.1
model = Sequential([
Dense(1)
])
model.compile(loss='mean_squared_error', optimizer=Adam(lr=0.1))
## 학습시키기
model.fit(
x_train,
y_train,
validation_data=(x_val, y_val), # 한 epoch이 끝날때마다 자동으로 검증
epochs=100 ## 100번 학습.
)
# 검증 데이터로 예측하기 predict
y_pred = model.predict(x_val) # 검증값 x_val 을 통해 예측한 값을 y_pred에 넣는다.
plt.scatter(x_val, y_val) # 점을 다다다 찍는 그래프로 나타낸 검증값 '기본 파란색'
plt.scatter(x_val, y_pred, color='r') # 그래프로 나타낸 예측값 '빨간색'
plt.show() # 그래프를 보여줘라
파란색점(검증값)과 빨간색점(예측값) 의 위치가 비슷비슷하다는 걸 볼수 있다.
즉, 예측이 매우 잘 됐다는 뜻이다.
다만 Newspaper 와 Radio 는 선형관계가 잘 안보이는데
그 이유는 데이터 자체가 선형의 경향이 잘 없기 때문에 랜덤한 느낌의 그래프가 나온 것이다.