해결된 질문
작성
·
657
2
안녕하세요, 구글코랩에서 GridsearchCV를 실행하다가 궁금한 점이 생겨 질문합니다.
grid_dtree.best_score_ 를 출력하면 정확도가0.975가 나오고 pred=grid_dtree.predict(X_test)에서 pred를 출력하면 0.9667이 나옵니다.
refit=True옵션이 최고성능을 내는 파라미터로 재학습하는 것이니 grid_dtree를 테스트 데이터셋으로 학습 및 예측한 pred와 best_score_ 속성 값은 동일해야 하는 것 아닌지 궁금합니다.
두 값이 다른 이유는 K폴드를 실행하는 과정에서 학습데이터셋과 테스트데이터셋의 구간이 강의에서 나온 구간과는 약간 상이해서 그런듯합니다. 이것도 맞는지 알려주시면 감사하겠습니다!
답변 6
3
소스코드에서 X_train, X_test, y_train, y_test= train_test_split(..., test_size=0.2)로 학습 데이터 세트(80%)와 테스트 데이트 세트(20%)가 분리되었습니다.
grid_dtree = GridSearch(... cv=3)
grid_dtree.fit(X_train, y_train)으로 학습 데이터 세트가 입력되면 GridSearchCV는 주어진 X_train, y_train으로 3개 Fold로 다시 학습/Valid 를 나눕니다. 즉 iris 데이터의 80%인 X_train을 다시 분할해서 학습(X_train의 2/3)과 Valid(X_train의 1/3)으로 나누면서 cross validation으로 학습과 검증을 수행하게 됩니다. 즉 X_train을 쪼개면서 학습하고 predict()한 최고 정확도를 grid_dtree.best_score_ 가 가지는 것입니다.
하지만 이는 테스트 데이터 X_test로 predict() 된게 아닙니다. 그렇기 때문에 X_test 로 predict()된 결과와 다릅니다.
0
0
강사님, iris데이터셋의 평균값하고 분산값을 구해보았는데 책이랑 미세하게 다른걸 보니 구글코랩의 iris 데이터셋이 약간 다른것 같습니다..! 이 부분이 best_score_값과 pred값이 다른 이유에 영향을 미칠 수도 있는건가요?
0
0
0
안녕하십니까,
grid_dtree.bet_score_는 validation 데이터 세트로 평가한 결과 입니다. 만일 validation 데이터 세트가 X_test 였다면 두개의 결과는 동일해야 할것입니다.
하지만 일반적으로는 Stratified K Fold로 되어 있으니, X_test를 validation으로 사용하지 않으셨을 것으라고 생각됩니다. 그래서 결과가 다를 것 같습니다. 만약 아니라면 다시 답변 부탁드립니다.(전체 소스 코드와 함께 부탁드립니다)
감사합니다.