📝딥러닝 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)를 파일로 저장해서 전송한다
'인공지능 > Deep Learning' 카테고리의 다른 글
[Deep Learning] TensorFlow optimizer learning rate 셋팅 (0) | 2022.12.28 |
---|---|
[Deep Learning] epochs history 차트 (0) | 2022.12.28 |
[Deep Learning] TensorFlow GridSearch (0) | 2022.12.27 |
[Deep Learning] Dummy variable trap (0) | 2022.12.27 |
[Deep Learning] epoch, batch_size 설정 (0) | 2022.12.27 |
댓글