본문 바로가기
Python/머신러닝+딥러닝 Ⅱ

교차검증 Ⅱ

by Mr.DonyStark 2024. 3. 26.

□ Cross_val_score()

  ○ 폴드세트설정 + For문활용 트레이닝/검증 데이터 학습 + 에측평균 성능산출작업을 한번에 작업함

  ○ 파라미터

    - estimator : 모델

    - x  : feature 데이터

    - y : 타겟(라벨) 데이터

    - scoring : 평가함수 ex)accuracy, recall 등

     - cv : 폴드시행 세트 수

#cross_val_score()
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_iris
import numpy as np

iris_data = load_iris() #데이터 저장

#데이터 분리
data = iris_data.data
label = iris_data.target

#모델객체생성
dt_clf = DecisionTreeClassifier(random_state=156)

#학습+측정 : 교차검증 및 성능지표 정확도
#└ 정확도로 함수지정, 폴드세트 3개 지정
#└ 분류모델일 경우 cross_val_score는 자동으로 straified fold 적용, 단, 회귀모델일 경우 불가
scores = cross_val_score(dt_clf, data, label, scoring="accuracy",cv=3)
print(f"교차 검증별 정확도 : {np.round(scores,4)}")
print(f"평균 검증 정확도 : {np.round(np.mean(scores),4)}")

 

□ GridSearchCV

  ○ 교차검증과 최적 하이퍼파라미터 튜닝을 한번에 진행해줌

  ○ 알고리즘 모델에 대한 속성, 즉 파라미터들을 튜닝해줌

#GridSearch CV
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.metrics import accuracy_score
import pandas as pd

#데이터 로딩 후 학습 데이터와 테스트 데이터 분리
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, test_size=0.4, random_state=121)

#모델객체생성
dtree = DecisionTreeClassifier()
#모델에 대한 파라미터 딕셔너리형태로 저장
parameters = {"max_depth":[1,2,3], "min_samples_split":[2,3]}

#parama_frid의 하이퍼 파라미터들을 3개의 train, test, set fold로 나누어 테스트 수행설정
#refit=True가 default임. True 면 가장 좋은 파라미터로 설정 후 재학습 시킴
grid_dtree = GridSearchCV(dtree, param_grid = parameters, cv=3, refit=True, return_train_score=True)

#학습 및 평가
grid_dtree.fit(X_train, y_train)

#greidsearch 결과는 cv_results_라는 딕셔너리로 저장됨 이를 데이터프레임으로 저장
scores_df = pd.DataFrame(grid_dtree.cv_results_)
print(scores_df)
scores_df[["params", "mean_test_score", "rank_test_score", "split0_test_score", "split1_test_score", "split2_test_score"]]

print(f"최적의 파라미터 : {grid_dtree.best_params_}")
print(f"최고 정확도 점수 : {grid_dtree.best_score_}")

# refit = True로 설정된 GridSearch 객체가 fit() 수행시 학습이 완료된 Estimator를 내표하고 있으므로 predict()를 통해 예측가능
pred = grid_dtree.predict(X_test)
print(f"테스트 데이터 세트 정확도 : {accuracy_score(y_test, pred)}")

모델에 대한 속성 리스트의 값을 지정해주면 이미지와 같이 알아서 지정하며 지정한 폴드 세트횟수만큼 진행

 

  ○ 사용자가 지정한 모델과 모델별 속성에 대한 파라미터 튜닝과 동시에 자체 트레이닝/검증하여 파악된 최적의 파라미터 모델 즉, estimator 를 GridSearchCh 에 저장함.

# GridSearchCV의 refit으로 이미 학습된 estimator 반환
estimator = grid_dtree.best_estimator_

# GridSearchCV의 best_estimator_는 최적 하이퍼 파라미터로 학습됨
y_pred = estimator.predict(X_test)

print(f"테스트 데이터 세트 정확도 : {accuracy_score(y_test, y_pred)}")