[머신러닝] 모델링 과정 (sklearn/ trainning set & test set / Pipeline / GridSearchCV / model.fit / best_estimator_ / Y_train_pred / Y_test_pred /classification_report )
01. X(설명 변수)와 Y(목표 변수) 설정
Y = df[' ']
X = df[' ']
먼저 전체 데이터에서 목표 변수(Y)와 설명 변수(X)를 설정하여 나눈다.
02. Trainning set(학습 데이터) & Validation set(검증 데이터)으로 분할
X_train, X_test, Y_train, Y_test = train_test_split(X,Y, test_size = 0.3, random_state =1234)
X와 Y로 나눈 데이터를 train_test_split( )을 이용하여 train set과 test set으로 분할한다. train_test_split( )의 파라미터들을 살펴보자. test_size는 '전체 데이터에서 테스트 데이터 세트의 크기를 얼마로 샘플링할 것인가?'를 의미한다. 따라서 test_size를 0.3으로 설정하면 train set이 70%, test set는 30% 비율로 분할된다. random_state는 호출할 때마다 동일한 학습/테스트용 데이터 세트를 생성하기 위해 주어지는 난수 값이다. train_test_split( )는 랜덤으로 데이터를 분리하므로 random_state를 설정하지 않으면 수행할 때마다 다른 학습/테스트 데이터 세트가 생성된다. 따라서 random_state를 설정하여 수행 시 결과값을 동일하게 맞춰주는 것이다. 이때 random_state에는 어떤 숫자를 적든 그 기능은 같기 때문에 어떤 숫자를 적든 상관없다.
03. 파이프라인 구축
pipe_list = [('sclaer', 스케일러()), ('model', 모델())]
pipe_model = Pipeline(pipe_list)
스케일링과 모델 학습을 동시에 진행하기위해 파이프라인을 구축한다. 파이프라인에는 사용할 스케일러와, 모델의 종류를 튜플 형태로 각각 적어주면 된다.
04. 하이퍼파라미터 튜닝
param_list = {'하이퍼파라미터' : [ ]}
grid_model = GridSearchCV(pipe_model, param_grid = param_list, cv= , scoring= , n_jobs=-1)
grid_model.fit(X_train, Y_train)
그다음으로는 하이퍼 파라미터를 튜닝할 차례다. 하이퍼 파라미터는 머신러닝 알고리즘을 구성하는 주요 요소들로, 사용자가 직접 조정할 수 있으며 이 값을 조정해 알고리즘의 성능을 개선시킬 수 있다. 하이퍼 파라미터를 튜닝한다는 것은 모델이 학습할 때 어떤 부분을 더 집중적으로 학습하면 좋을지 집어주는 것이라고 생각하면 된다. 하이퍼 파라미터 튜닝을 할 때 GridSearchCV를 사용하면 교차검증과 최적의 하이퍼 파라미터 튜닝을 한 번에 할 수 있다. 먼저 param_list에 파라미터명과 각 파라미터에서 사용할 값을 딕셔너리 형태로 적어준다. (이때 파라미터는 알고리즘의 종류에 따라 다르다. 참고 사이트: https://scikit-learn.org/stable/ ) GridSearchCV는 param_grid에 기술된 모든 파라미터를 순차적으로 적용해 (모든 경우의수, 모든 조합을 만들어본다) 최적의 파라미터를 찾게 해 준다.
GridSerchCV에 들어가는 주요 파라미터들을 살펴보자.
➰ Param_grid에는 파라미터와 각 파라미터의 값을 딕셔너리 형태로 적어준다.
➰ scoring은 모델 예측 성능을 평가 할때 기준으로 삼고 싶은 지표를 적어주면 된다. 예를 들어 scoring = 'f1'으로 설정하면, f1 score가 높아지는 방향으로 모델을 만들어라!라는 의미가 된다.
➰ cv는 교차검증을 위해 분할되는 학습/테스트 세트의 개수를 의미한다. 즉, 몇개의 덩어리로 나눌 것인가?라고 생각하면 된다. 예를 들어, cv=5로 설정하면, 5개의 덩어리로 나눠서 교차검증을 실시한다는 의미가 된다.
05. Best Model 선택
best_model = grid_model.best_estimator_
best_model
best_estimator_를 사용하여 어떻게 하이퍼 파라미터를 설정했을때 가장 모델의 성능이 좋은지 확인하고, 그렇게 나온 모델을 best_model로 설정한다.
06. 모델 평가를 위한 예측값 계산
Y_train_pred = best_model.predict(X_train)
Y_test_pred = best_model.predict(X_test)
best model로 선택된 모델이 잘 만들어졌는지 평가하기 위해 X_train과 X_test를 각각 넣는다. 이때 모델에 의해 예측된 값을 각각 Y_train_pred, Y_test_pred라고 설정한다.
07. 모델 성능 평가
머신러닝 모델링에서 중요하게 생각해봐야하는것 두 가지는,
1) 모델이 학습을 잘 했는가?
2) 일반화가 잘 되었는가?
➰ 학습이 잘 되었는지 평가
print(classification_report(Y_train, Y_train_pred))
먼저, 모델의 학습능력을 평가해보자. 이 단계는 시험지를 푼 다음, 내가 쓴 답과 실제 정답을 비교하는 과정이라고 생각하면 된다. 실제 정답인 Y_train과 X_train을 모델에 넣었을 때 출력된 예측값인 Y_train_pred를 비교한다. 이때 classification_report( )를 print( )함수와 함께 사용하면 위와 같은 표 형태의 값이 출력된다.
➰일반화가 잘 되었는지 평가
print(classification_report(Y_test, Y_test_pred))
다음으로는 모델이 과대적합이나 과소 적합되지 않고, 일반화가 잘 되었는지 평가하기 위해 Y_test와 Y_test_pred를 classification_report로 확인한다. 만약 모델의 학습 능력 평가 시, 성능이 높게 나왔는데 일반화 평가시 값이 낮게 나왔다면 모델이 과적합되었다고 볼 수 있다.