Data Analyst KIM

[ML] 2. Model Selection 모듈 소개(train_test_split,교차검증,그리드서치) 본문

데이터 분석/ML&DL&NLP

[ML] 2. Model Selection 모듈 소개(train_test_split,교차검증,그리드서치)

김두연 2023. 10. 9. 09:35
반응형
사이킷런의 Model Selection 모듈에서 제공하는 기능
  • 학습 데이터와 테스트 데이터 세트 분리
  • 교차 검증 분할 및 평가
  • 하이퍼 파라미터 튜닝

 

1. 학습 데이터와 테스트 데이터 세트 분리

 

데이터를 분리하기 위해서는 train_test_split을 사용을 해야한다.

X_train, X_test, y_train, y_test로 나누게 된다. 그 이유는 정확도를 계산 하려면 실제 값과 같은지 다른지를 파악해야하기 때문이다.

X_train과 y_train로 학습을 한다. 여기서 feature는 X_train이 되고 Target은 y_train이 된다.

모델링에서 학습을 한 후 X_test를 이용하여 예측을 수행한다. 예측 결과와 y_test를 비교하여 정확도를 계산한다.

기본 코드는 다음과 같다. 여기서 test_size=0.3은 30% test데이터로 사용하겠다는 의미이다.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, 
                                                    test_size=0.3, random_state=121)

iris 데이터를 분리하고 의사결정나무로 모델링 한 후 정확도를 구해보자.

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

iris_data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, 
                                                    test_size=0.3, random_state=121)

dt_clf = DecisionTreeClassifier( )                                                    
dt_clf.fit(X_train, y_train)
pred = dt_clf.predict(X_test)
print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test,pred)))


하이퍼 파라미터 튜닝(GridSearchCV)

사이킷런은 GridSearchCV를 이용해 하이퍼 파라미터를 순차적으로 입력하면서 편리하게 최적의 파라미터를 도출할 수 있는 방안을 제공한다. 

 

의사결정 나무로 모델링을 해보자. 여기서 몇 개의 가지가 가장 정확도가 높은지 모른다.

GridSearchCV를 사용하여 정확도를 높이는 하이퍼 파라미터 튜닝을 해보자.

 

import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

iris_data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, 
                                                    test_size=0.2, random_state=121)

dtree = DecisionTreeClassifier()   # 트리 생성                                               
parameters = {'max_depth':[1,2,3], 'min_samples_split':[2,3]} # 파라미터 입력
grid_dtree = GridSearchCV(dtree, param_grid=parameters, cv=3, refit=True) # 그리드 서치
grid_dtree.fit(X_train, y_train)

print('GridSearchCV 최적 파라미터:', grid_dtree.best_params_)
print('GridSearchCV 최고 정확도: {0:.4f}'.format(grid_dtree.best_score_))

 

훈련된 모델에 새로운 데이터가 들어왔을 때의 정확도를 파악해보자.

estimator = grid_dtree.best_estimator_

pred = estimator.predict(X_test)
print('테스트 데이터 세트 정확도: {0:.4f}'.format(accuracy_score(y_test,pred)))

 

반응형