군침이 싹 도는 코딩
텐서플로우 리그레션 문제 모델링 하는 방법 본문
# 자동차 구매 고객 데이터를 통해서 자동차 구매금액을 예측하는 리그레션 문제를 모델링해보자
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
# 비어있는 데이터를 확인해준다
X = df.loc[:,'Gender':'Net Worth']
y = df['Car Purchase Amount']
# X,y 를 나눠준다
from sklearn.preprocessing import MinMaxScaler
scaler_X = MinMaxScaler()
X = scaler_X.fit_transform(X.values)
# 피쳐 스케일링을 해주는데 X,y 각각 스케일러를 만들어줘야한다
그 후 먼저 X부터 피쳐 스케일링한다
scaler_y = MinMaxScaler()
scaler_y.fit_transform(y.values)
# y를 피쳐 스케일링 하는 도중에 에러가 났다
이유는 y는 1차원 데이터인데 스케일러 안에는 2차원 데이터가 들어가야하기 때문이다
해당 에러를 디버깅하기 위해서는 reshape를 사용하여 2차원으로 만들어주면 된다
y.reshape(500,1)
# 리쉐이브를 이용해서 2차원으로 만들려고 했지만 에러가 났다
이유는 판다스 시리즈에는 리쉐이브라는 함수가 없기 때문이다
이것을 넘파이로 바꿔주어야한다
y.values.reshape(500,1)
# 문제 없이 정상 작동하였다 이제 이것을 피쳐 스케일링 해준다
y_scaled = scaler_y.fit_transform(y.values.reshape(500,1))
# 에러 없이 정상 작동하였다
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
# 모델링에 필요한 라이브러리를 임포트 한다.
from keras.engine.sequential import input_layer
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
# 함수를 만들어서 모델링을 한다.
히든레이어는 렐루 유닛은 5, 25, 10개를 하였다
첫 히든레이어에는 인풋 쉐이브가 들어가야한다 파라미터로는 X의 열의 값
아웃풋 레이어의 유닛은 1개 액티비션은 가격을 예측하는 문제이므로 리니어를 사용한다
마지막으로 컴파일에는 옵티마이저에는 아담 로스펑션에는 mse(mean_squared_error)
검증(metrics)은 가격 예측은 mse(mean_squared_error)로 검증하기때문에 mse 로 해준다
model = build_model()
model.summary()
>>>
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_4 (Dense) (None, 5) 30
dense_5 (Dense) (None, 25) 150
dense_6 (Dense) (None, 10) 260
dense_7 (Dense) (None, 1) 11
=================================================================
Total params: 451
Trainable params: 451
Non-trainable params: 0
_________________________________________________________________
# 모델이라는 인공지능을 만들어서 서머리를 찍어본다
히든 레이어 3개와 아웃풋 레이어 1개가 정상적으로 잘 만들어졌다
model.fit(X_train,y_train,batch_size=10, epochs=20)
>>>
Epoch 1/20
38/38 [==============================] - 1s 3ms/step - loss: 0.2031 - mse: 0.2031 - mae: 0.4041
Epoch 2/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0296 - mse: 0.0296 - mae: 0.1402
Epoch 3/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0190 - mse: 0.0190 - mae: 0.1118
Epoch 4/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0165 - mse: 0.0165 - mae: 0.1034
Epoch 5/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0147 - mse: 0.0147 - mae: 0.0974
Epoch 6/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0132 - mse: 0.0132 - mae: 0.0913
Epoch 7/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0119 - mse: 0.0119 - mae: 0.0863
Epoch 8/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0106 - mse: 0.0106 - mae: 0.0813
Epoch 9/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0095 - mse: 0.0095 - mae: 0.0767
Epoch 10/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0085 - mse: 0.0085 - mae: 0.0724
Epoch 11/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0072 - mse: 0.0072 - mae: 0.0667
Epoch 12/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0062 - mse: 0.0062 - mae: 0.0613
Epoch 13/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0051 - mse: 0.0051 - mae: 0.0553
Epoch 14/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0039 - mse: 0.0039 - mae: 0.0488
Epoch 15/20
38/38 [==============================] - 0s 2ms/step - loss: 0.0031 - mse: 0.0031 - mae: 0.0433
Epoch 16/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0026 - mse: 0.0026 - mae: 0.0394
Epoch 17/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0020 - mse: 0.0020 - mae: 0.0349
Epoch 18/20
38/38 [==============================] - 0s 2ms/step - loss: 0.0016 - mse: 0.0016 - mae: 0.0313
Epoch 19/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0013 - mse: 0.0013 - mae: 0.0283
Epoch 20/20
38/38 [==============================] - 0s 3ms/step - loss: 0.0010 - mse: 0.0010 - mae: 0.0249
<keras.callbacks.History at 0x7f8bbda51d30>
# 이제 X_train과 y_train을 넣어 학습 시킨다.
배치 사이즈와 에폭스는 원하는대로 넣어도 된다.
model.evaluate(X_test,y_test)
>>>
4/4 [==============================] - 0s 4ms/step - loss: 0.0012 - mse: 0.0012 - mae: 0.0276
[0.0012255063047632575, 0.0012255063047632575, 0.027560757473111153]
# evaluate라는 텐서플로우에서 제공하는 검증함수를 통해 검증한다
'Python > Deep Learning' 카테고리의 다른 글
fit 함수의 결과를 차트로 보여주는 법 (history) (0) | 2022.12.28 |
---|---|
번외) 새로운 데이터를 통해 가격 예측 (0) | 2022.12.28 |
텐서플로우를 이용한 그리드 서치 방법 (0) | 2022.12.27 |
텐서플로우로 분류의 문제 모델링 하는 방법 (0) | 2022.12.27 |
Dummy variable trap (0) | 2022.12.27 |