모델링 전 데이터 전처리부터 한다.
1. 데이터 확인
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 데이터 통계 확인
>>> df.describe()
# nan값 확인
>>> df.isna().sum()
# 학습을 위해 X,y값 지정
>>> X = df.loc[ : , '컬럼' : '컬럼' ]
>>> y = df['컬럼']
2. 피처 스케일링
from sklearn.preprocessing import MinMaxScaler
# X값 피처스케일링
>>> scaler_X = MinMaxScaler()
>>> X = scaler_X.fit_transform(X.values)
# y값 피처스케일링
>>> scaler_y = MinMaxScaler()
# y는 2차원 데이터가 아닌 1차원 데이터이기 때문에 에러 발생
# 시리즈는 reshape가 없기 때문에 또 에러 발생
# y.values를 입력해 1차원 넘파이로 바꿔서 reshape
>>> y.values.reshape(500, 1)
# >>> y.values.reshape(-1, 1)
# >>> y = scaler_y.fit_transform(y.to_frame())
# 다 같은 결과이다.
# reshape한 결과를 scaler_y에 입혀 새로운 변수로 저장해 사용
>>> y_scaled = scaler_y.fit_transform( y.values.reshape(500, 1) )
3. 트레이닝셋과 테스트셋으로 분리
from sklearn.model_selection import train_test_split
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=50)
4. 딥러닝을 이용한 모델링
import tensorflow.keras
from keras.models import Sequential
from keras.layers import Dense
from sklearn.preprocessing import MinMaxScaler
>>> def build_model():
model = Sequential()
model.add(Dense(10, 'relu', input_shape=(X_train.shape[1],)))
model.add(Dense(10, 'relu'))
model.add(Dense(5, 'relu'))
model.add(Dense(1, 'linear')) # 수치 예측은 linear
# 옵티마이저는 'adam', 로스펑션은 'mean_squared_error'로 셋팅하여 컴파일
model.compile(optimizer='adam', loss='mse', metrics=['mse', 'mae'])
return model
>>> model = build_model()
>>> model.summary()
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_4 (Dense) (None, 10) 60
dense_5 (Dense) (None, 10) 110
dense_6 (Dense) (None, 5) 55
dense_7 (Dense) (None, 1) 6
=================================================================
Total params: 231 (924.00 Byte)
Trainable params: 231 (924.00 Byte)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________
5. 학습, 평가 (Evaluating)
# 학습
>>> model.fit(X_train, y_train, batch_size= 10, epochs= 20)
# 평가
>>> model.evaluate(X_test, y_test)
>>> y_pred = model.predict(X_test)
>>> ((y_test - y_pred)**2).mean()
# 실제값과 예측값을 plot 으로 나타내기
>>> df_test = pd.DataFrame(y_test, columns=['y_test'])
>>> df_test['y_pred'] = y_pred
>>> df_test.plot()
>>> plt.show()
실제 예측 해보기
# 고객은 여자이고, 나이는 38, 연봉은 90000, 카드빚은 2000, 순자산은 500000
# 어느 정도의 차량을 구매할 수 있을지 예측하시오.
>>> new_data = [{'Gender':0, 'Age':38, 'Annual Salary':90000, 'Credit Card Debt':2000, 'Net Worth':50000}]
>>> new_data = pd.DataFrame(new_data)
# 피처 스케일링
>>> new_data = scaler_X.transform(new_data)
>>> y_pred = model.predict(new_data)
array([[0.31696528]], dtype=float32)
# 예측값을 기존값으로 반환
>>> scaler_y.inverse_transform(y_pred)
array([[31504.535]], dtype=float32)
'인공지능 > Deep Learning' 카테고리의 다른 글
[Deep Learning] DNN TensorFlow 이미지 분류 딥러닝 (0) | 2024.04.18 |
---|---|
[Deep Learning] epochs history 차트 시각화 (0) | 2024.04.17 |
[Deep Learning] TensorFlow GridSearch (0) | 2024.04.17 |
[Deep Learning] Optimizer (0) | 2024.04.16 |
[Deep Learning] batch_size, epoch (0) | 2024.04.16 |