이번 시간에는 텐서플로우로 리그레션 문제를 모델링해보자
저번 시간과 마찬가지로 구글 코렙에서 진행한다.
우선 데이터를 불러온다.
# 기본 함수
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달러에 차를 산다는것을 알수 있다.
반응형
'딥러닝' 카테고리의 다른 글
딥러닝(7) flatten 라이브러리 사용하는 이유, 액티베이션함수 소프트맥스, 분류의 문제에서 loss셋팅 (0) | 2022.12.29 |
---|---|
딥러닝(6) validation split (0) | 2022.12.29 |
딥러닝(4) GridSearch 를 이용한, 최적의 하이퍼 파라미터 찾기 (0) | 2022.12.27 |
딥러닝(3) dummy variable trap (0) | 2022.12.27 |
딥러닝(2) 텐서플로우에서 학습시 epoch와 batch_size에 대한 설명 (0) | 2022.12.27 |