본문 바로가기
인공지능/Deep Learning

[Deep Learning] DNN TensorFlow Regression 수치예측 문제 모델링

by coding_su 2022. 12. 28.

📝딥러닝 DNN 텐서플로우 리그레션(수치예측) 문제 모델링

★ 모델링 하기전 데이터 전처리를 먼저 한다

 

1. 데이터 확인하고 X,y 값 지정

# 기본 데이터 통계치 확인
df.describe()

# nan값 확인(있으면 제거)
df.isna().sum()

# 학습을 위해 X,y값 지정 (X값은 예측에 필요한 컬럼, y는 예측할 값)
X = df.loc[ : ,  '컬럼' : '컬럼' ]
y = df['컬럼']

 

2. 피처스케일링(데이터 정규화)

※ y값을 정규화 할때 데이터 타입 에러 주의

from sklearn.preprocessing import MinMaxScaler

# X값 피처스케일링
scaler_X = MinMaxScaler()
X = scaler_X.fit_transform(X.values)

# y값 피처스케일링
scaler_y = MinMaxScaler()

# 이런식으로 코드를 작성하면 y는 2차원 데이터가 아닌 1차원 데이터이기 때문에 에러 발생
scaler_y.fit_transform(y.values)

# 그래서 reshape 하는 코드를 작성하면 시리즈는 reshape가 없기 때문에 또 에러 발생
y.reshape(500, 1)

# y.values를 입력해 1차원 넘파이로 바꿔서 reshape 해야한다
y.values.reshape(500, 1)

# 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_scaled, test_size = 0.25, random_state = 50)

 

4. 모델링

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( optimizer= 'adam', loss= 'mse', metrics= [ 'mse', 'mae' ])
  return model
  
# 변수에 저장해 사용
model = build_model()

 

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)
error = y_test - y_pred
(error ** 2).mean()

# 실제값과 예측값을 plot 으로 나타내기
plt.plot(y_test)
plt.plot(y_pred)
plt.show()

 

6. 실제 예측해보기

첫번째 고객은 여자이고, 나이는 38, 연봉은 90000, 카드빚은 2000, 순자산은 500000
두번째 고객은 남자이고, 나이는 27, 연봉은 30000, 카드빚은 10000, 순자산은 300000


new_data2 = np.array([[0, 38, 90000, 2000, 500000],[1, 27, 30000, 10000, 300000]])
# new_data = np.array([[0, 38, 90000, 2000, 500000, 1, 27, 30000, 10000, 300000]])
# 이렇게 다 이어서 붙여 쓰고 new_data.reshape(2,5) 해도 된다

# 피처스케일링
new_data2 = scaler_X.transform(new_data2)

# 예측값 변수 저장
y_pred3 = model.predict(new_data2)

# 예측값을 기존값으로 반환
scaler_y.inverse_transform(y_pred3)

 

작업을 완료하였다면 인공지능(model)과 인공지능을 만들때 사용된 변수(scaler)를 파일로 저장해서 전송한다

댓글