Deep Learning

Tensorflow, 회귀 문제 모델링 하는 방법

yugyeong 2022. 12. 28. 11:51

회귀 문제의 모델 딥러닝

 

자동차 구매 가격을 예측하는 딥러닝 모델을 만들 것이다.

 

  • 자동차 구매 가격 예측

Car_Purchasing_Data.csv
0.06MB

 

 

 

1.  필요한 라이브러리를 임포트 한다

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

 

df = pd.read_csv('Car_Purchasing_Data.csv', encoding='ISO-8859-1')
df

 

2. X , y 셋팅

X = df.iloc[:,3:8]
y = df['Car Purchase Amount']

 

df 에서 Gender ~ Net Worth 컬럼을 변수 X 로 두고,

Purchase Amout 를 변수 y로 두었다.

 

 

3. 피쳐스케일링 -  MinMaxScaler

from sklearn.preprocessing import MinMaxScaler

# X 데이터 피쳐스케일링
scaler_X = MinMaxScaler()
X = scaler_X.fit_transform(X.values)

# y 데이터는 시리즈 데이터를 2차원 배열로 변경 해야 하기 때문에 reshape을 한 후에 피쳐스케일링을 해준다.
scaler_y = MinMaxScaler()
y_scaled = scaler_y.fit_transform(y.values.reshape(500,1))

 

4. 훈련용 데이터, 테스트용 데이터로 나누기

test_size 는 25, random_state 는 50 으로 설정하였다.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y_scaled, test_size= 25, random_state= 50)

 

 

5. 모델링

딥러닝에 필요한 라이브러리를 임포트 한다.

import tensorflow.keras
from keras.models import Sequential
from keras.layers import Dense

 

인공지능 모델 생성

model = Sequential()

 

레이어 설정

  • 유닛과 활성함수는 원하는대로 설정
  • 첫번째 input layer는 반드시 입력층의 형태를 지정
  • 마지막 output layer는 분류 문제의 모델이 아니기 때문에 sigmiod 사용하지 않고 linear 이용
model.add(Dense(units= 5, activation= 'relu', input_shape=(5, )))
model.add(Dense(units= 25, activation= 'relu'))
model.add(Dense(units= 10, activation= 'relu'))
model.add(Dense(units= 1, activation='linear'))

 

 

컴파일 설정

  • 옵티마이저는 adam 으로 설정
  • 로스 펑션은 'mean_squared_error' 로 셋팅
model.compile(optimizer= 'adam', loss= 'mse', metrics= ['mse','mae'])

 

model.summary() 확인

model.summary()

 

6. 모델 학습

batch_size 와 epochs 를 설정한 후 모델을 학습시킨다.

  • epochs : 모델의 전체 데이터 셋에서 학습 횟수
  • batch_size : 샘플의 갯수대로 학습 한 후 가중치 갱신
model.fit(X_train, y_train, batch_size= 10, epochs= 20)

 

7. 결과값 예측

y_pred = model.predict(X_test)
y_pred

 

8. 차트로 나타내기

plt.plot(y_test)
plt.plot(y_pred)
plt.show()