지난번에는 아웃레이어의 엑티베이션 함수에 시그모이드를 이용하였습니다.
이번에는 텐서플로우를 이용한 ANN 의 마지막 아웃레이어를 리니어로 모델링하여 리그레션 문제를 모델링해보겠습니다.
1. 데이터 파일을 가져옵니다.
import pandas as pd
df = pd.read_csv('Car_Purchasing_Data.csv', encoding='ISO-8859-1')
2. 데이터를 분석하여 X,y축을 설정합니다.
# 데이터의 NaN확인
df.isna().sum()
# 데이터의 컬럼 확인
df.columns
# X축 설정
X = df.loc[:,'Gender':'Net Worth']
# y축 설정
y = df['Car Purchase Amount']
3. 설정한 데이터를 보고 문자열이 있으면 인코딩을 진행하지만 지금 제 파일에서는 없기때문에 피처스케일링을 진행합니다.
from sklearn.preprocessing import MinMaxScaler
# X 축 피처스케일링
scaler_X = MinMaxScaler()
scaler_X.fit_transform(X.values)
X = scaler_X.fit_transform(X.values)
# y축도 할 필요가 있어서 새로 해줍니다.
scaler_y = MinMaxScaler()
# y축이 현재 1차원이기에 스케일링을 2차원으로 진행합니다.
scaler_y.fit_transform(y.values.reshape(500,1))
y_scaled = scaler_y.fit_transform(y.values.reshape(500,1))
4. train/test 로 나눕니다.
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)
5. 모델을 만듭니다.
import tensorflow.keras
from keras.models import Sequential
from keras.layers import Dense
from keras.engine import input_layer
# 모델링의 구성을 만드는 함수
def build_model() :
model = Sequential()
# hidden layer
model.add(Dense(units= 5 , activation= 'relu' , input_shape = (5,) ))
model.add(Dense(units = 25, activation ='relu'))
model.add(Dense(units=10,activation = 'relu'))
# output layer
# linear 는 수치를 그대로 표현해달라는 뜻입니다.
model.add(Dense(units=1 , activation = 'linear'))
# compile
model.compile(optimizer = 'adam' , loss = 'mse' , metrics = ['mse' , 'mae'])
return model
# 빈 모델링 생성
model = build_model()
6. 학습을 시작합니다.
model.fit(X_train,y_train,batch_size = 10 , epochs= 20)
7. 학습한 결과를 평가합니다.
model.evaluate(X_test,y_test)
8. 이제 만든 인공지능에 새로운 데이터를 넣어 값을 확인합니다.
# 새로운 데이터 생성
new_data = np.array( [ 0 , 38 , 90000 , 2000 , 500000 ])
# 새로운 데이터의 모양 확인
new_data.shape
# 새로운 데이터의 모양을 재지정
new_data = new_data.reshape(1,5)
# 스케일링
scaler_X.transform(new_data)
new_data = scaler_X.transform(new_data)
# 예측하기
model.predict(new_data)
# 예측한 결과를 스케일링 전의 값으로 되돌리기
new_data_pred = model.predict(new_data)
scaler_y.inverse_transform(new_data_pred)
'개발 > 머신러닝' 카테고리의 다른 글
파이썬 머신러닝 - learning rate 와 validation , earlystopping (1) | 2022.12.28 |
---|---|
파이썬 머신러닝 - epochs history 로 차트 만들어 확인 (0) | 2022.12.28 |
파이썬 머신러닝 - 텐서플로우를 이용한 그리드서치 (0) | 2022.12.27 |
파이썬 머신러닝 - 텐서플로우를 이용한 ANN , Dummy variable trap,batch_size , epochs (0) | 2022.12.27 |
파이썬 머신러닝 - Neural Networks (0) | 2022.12.27 |