딥러닝

딥러닝(5) 텐서플로우로 리그레션 문제 모델링 하는 방법

개발연습자1 2022. 12. 28. 12:11

이번 시간에는 텐서플로우로 리그레션 문제를 모델링해보자

 

저번 시간과 마찬가지로 구글 코렙에서 진행한다.

 

우선 데이터를 불러온다.

# 기본 함수
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 구글 드라이브 마운트
from google.colab import drive
drive.mount('/content/drive')

#working directory 셋팅
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks/ml_plus/data')

#csv 파일 불러오기
df = pd.read_csv('Car_Purchasing_Data.csv',encoding='ISO-8859-1')

 

데이터를 요약으로 확인한다.

df.describe()

상관관계를 분석한다.

import seaborn as sb
sb.pairplot(data=df)
plt.show()

컬럼중 Gender,Age,Annual Salary,Credit Card Debt,Net Worth와 Car Purchase Amount 관계가 있다는걸 알수 있다.

NaN 값이 있으면, 이를 해결한다.

df.isna().sum()

>> Customer Name          0
   Customer e-mail        0
   Country                0
   Gender                 0
   Age                    0
   Annual Salary          0
   Credit Card Debt       0
   Net Worth              0
   Car Purchase Amount    0
   dtype: int64

위에 데이터에선 nan 값이 없다.

 

 

X,y데이터로 나눈다.

X = df.loc[:,'Gender':'Net Worth']
y = df['Car Purchase Amount']

 

피처스케일링으로 정규화해서 데이터 간에 범위를 맞춰준다.

일단 X데이터부터 진행한다.

from sklearn.preprocessing import MinMaxScaler
scaler_X = MinMaxScaler()
X=scaler_X.fit_transform(X.values)

 

 y데이터는 y데이터의 value를 reshape해서 넣어주어야 한다.

y_scaled=scaler_y.fit_transform(y.values.reshape(500,1))

 

 

데이터를 각각 트레이닝셋과 테스트셋으로 분리하여야 한다.

from pandas.core.common import random_state
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y_scaled,test_size=0.25,random_state=50)

 

딥러닝을 이용한 모델링을 해보자

import tensorflow.keras
from keras.models import Sequential
from keras.layers import Dense
from sklearn.preprocessing import MinMaxScaler

def bulid_model():
  #모델링
  model =Sequential()
  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'))
  model.compile(optimizer='adam',loss='mse',metrics=['mse','mae'])
  return model

 

bulid_model함수를 model변수에 넣는다.

model = bulid_model()

 

데이터를 학습한다.

model.fit(X_train,y_train,batch_size=10,epochs=20)

 

모델을 평가한다.

model.evaluate(X_test,y_test)

 

X_test데이터를 넣고 모델로 예측한다.

y_pred=model.predict(X_test)

 

예측이 끝나면 실제값과 얼마나 일치하는지 그래프를 그려본다.

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

 

다른 새로운 데이터 값을 집어넣었을때 모델이 값을 예측하는지 알아본다.

#새로운 데이터 2개
new_data2=np.array([0,38,90000,2000,500000,1,27,30000,10000,300000])
new_data2=new_data2.reshape(2,5)
new_data2=scaler_X.transform(new_data2)

#새로운 데이터를 넣고 예측
model_pred2=model.predict(new_data2)

#스케일 바뀐 예측값을 다시 반대로 변환한다.
scaler_y.inverse_transform(model_pred2)
>> array([[55903.527],
          [38259.44 ]], dtype=float32)

 

첫번째 신규고객은 약 55903달러에 두번째 신규고객은 38259달러에 차를 산다는것을 알수 있다.

반응형