개발공부

텐서플로우를 이용한 그리드 서치하는 방법 본문

Python/Deep Learning

텐서플로우를 이용한 그리드 서치하는 방법

mscha 2022. 6. 13. 09:37
고객 정보와 해당 고객이 금융상품을 갱신했는지 안했는지의 여부에 대한 데이터가 있다.
이 데이터를 가지고 갱신여부를 예측 (분류) 하는 딥러닝을 구성해보자.
 
먼저 csv파일을 판다스 데이터 프레임으로 읽어온다.

 

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('data/Churn_Modelling.csv')
df

 

 

NAN 값이 있는지 확인한다.

df.isnull().sum()

 

X 를 설정한다.

X = df.loc[:, 'CreditScore' : 'EstimatedSalary']
X

 

y를 설정한다.

y = df['Exited']
y

 

문자열 데이터는 숫자로 바꿔준다. (인코딩)

 

Gender는 레이블 인코딩한다.

from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
X['Gender'] = encoder.fit_transform(X['Gender'])
X

 

Geography는 원 핫 인코딩 한다.

from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer

ct = ColumnTransformer( [ ('encoder', OneHotEncoder(), [1]) ],
                    remainder= 'passthrough')
X = ct.fit_transform(X)
X

X의 첫 컬럼은 없어도 그 뒤의 두개 컬럼만으로도 Geography를 구분할 수 있으니 제거한다.

X = X[:, 1: ]
X

 

피처 스케일링한다. MinMaxScaler를 이용해보자.

from sklearn.preprocessing import MinMaxScaler

sc_X = MinMaxScaler()
X = sc_X.fit_transform(X)
X

 

데이터를 학습용과 검증용으로 나눈다. ex (train - 80%, test - 20%)

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
                                        X, y, test_size=0.2, random_state= 0 )

 

이제 그리드 서치를 이용하여 최적의 파라미터를 찾아보자.

# Tuning the ANN
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV
from keras.models import Sequential
from keras.layers import Dense

모델링 함수 정의

def build_classifier(optimizer) :
    # 모델링
    model = Sequential()
    model.add(Dense(units = 6, activation = 'relu', input_shape = (11,)))
    model.add(Dense(units = 8, activation= 'relu'))
    
    model.add(Dense(units = 1, activation = 'sigmoid'))
    # accuracy도 추가로 확인한다.
    model.compile(optimizer = optimizer, loss = 'binary_crossentropy', metrics = ['accuracy'])
    return model
model = KerasClassifier(build_fn= build_classifier)

 

# 그리드서치에 이용할 파라미터들 정의
my_parameters = {'epochs' : [30, 50], 
                 'batch_size' : [10, 20],
                 'optimizer' : ['adam', 'rmsprop']}

그리드 서치

grid_search = GridSearchCV(estimator = model, param_grid = my_parameters, scoring = 'accuracy')

grid_search.fit(X_train, y_train)

# 최적의 파라미터 출력
grid_search.best_params_

# 그리드 서치를 했을 때 가장 높은 score 출력
grid_search.best_score_

 

이제 가장 최적의 파라미터를 넣은 모델을 생성해서 이를 이용해 predict 하면 된다.

# 가장최적의 파라미터를 넣은 모델을 생성
model = grid_search.best_estimator_