개발공부

텐서플로우로 리그레션(Regression) 문제 모델링 하는 방법 실습 본문

Python/Deep Learning

텐서플로우로 리그레션(Regression) 문제 모델링 하는 방법 실습

mscha 2022. 6. 10. 18:07

Car_Purchasing_Data.csv
0.06MB

다음과 같은 컬럼을 가지고 있는 데이터셋을 읽어서, 어떠한 고객이 있을때, 그 고객이 얼마정도의 차를 구매할 수 있을지를 예측하여, 그 사람에게 맞는 자동차를 보여주려 한다. 

Customer Name
Customer e-mail
Country
Gender
Age
Annual Salary 
Credit Card Debt 
Net Worth (순자산)

예측하고자 하는 값 : 
Car Purchase Amount 
 
 
csv파일을 읽어온다.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

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

 

NAN값이 있는지 확인한다.

df.isna().sum()

 

X를 설정한다.

X = df.iloc[:, 3: -2+1]
X

 

y를 설정한다.

y = df['Car Purchase Amount']

 

피처 스케일링한다.

from sklearn.preprocessing import MinMaxScaler

sc_X = MinMaxScaler()
X_scaled = sc_X.fit_transform(X)
X_scaled

y.shape
>> (500,)

 

y는 1차원이기 때문에 2차원 어레이로 변경한 후 피처 스케일링 한다.

y = y.values.reshape(500, 1)

sc_y = MinMaxScaler()
y_scaled = sc_y.fit_transform(y)

 

트레이닝 세트와 테스트 세트로 분리한다.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
                                        X_scaled, y_scaled, test_size=0.2, random_state= 11 )

 

모델을 생성한다.

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


def build_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('adam', 'mse')
    return model
    
model = build_model()
model.summary()

 

만든 모델을 학습시킨다.

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

 

테스트 세트로 예측해보자.

y_pred = model.predict(X_test)

 

실제값과 예측값의 분포를 차트로 나타내보자.

plt.plot(y_test, c='b')
plt.plot(y_pred, c='r')
plt.show()

 

MSE를 계산해보자.

>>> ((y_test - y_pred)**2).mean()
0.0004711302668406312

 

새로운 데이터를 가지고 예측을 해보자.

여자이고, 나이는 38, 연봉은 90000,  카드빚은 2000, 순자산은 500000 일때
어느정도의 차량을 구매할 수 있을지 예측하시오.

 

위의 데이터를 X의 모양과 맞추면 아래와같다.

new_data = np.array([0, 38, 90000, 2000,  500000])

new_data = new_data.reshape(1,-1)

 

피처 스케일링하자.

new_data = sc_X.transform(new_data)

 

예측해보자.

y_pred = model.predict(new_data)

y_pred = sc_y.inverse_transform(y_pred)

y_pred[0,0]