아래 코드에서 best_estimator_
과 best_score_
사이의 연결을 이해하려고합니다. 나는 다음과 같은 출력을 얻을 그러나sklearn의 이해 GridSearchCV의 best_score_ 및 best_estimator_
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import log_loss
classifier = GridSearchCV(LogisticRegression(penalty='l1'),
{'C':10**(np.linspace(1,6,num=11))},
scoring='neg_log_loss')
classifier.fit(X_train, y_train)
y_pred = classifier.best_estimator_.predict(X_train)
print(f'{log_loss(y_train,y_pred)}')
print(f'{classifier.best_score_}')
는 (숫자가 다른에 많은 변화하지 않는 : 나는 best_score_
에 (매우 가까운 근사치 이상)과 같이 best_estimator_
의 결과를 점수로 내가 얻을 수 있어야한다고 생각)를 실행합니다 :
7.841241697018637
-0.5470694752031108
내가 best_score_
가 교차 검증 반복의 평균으로 계산된다는 것을 이해는하지만이 반드시 (편견 추정도 가까운 근사치이어야 함) 전체 세트 메트릭을 계산하는? . 왜 그렇게 다른지 이해할 수 없으므로 구현 오류가 발생했다고 가정합니다.
나만의 방법으로 classifier.best_score_
을 계산할 수 있습니까?
물론! 감사! 점수는 이제 0.4930534590910885' '-0.5471970784999165'에 훨씬 가까워졌습니다. 그래도 여전히 ~ 10 % 할인되었지만, 표본 크기와 폴드 수에 따라 달라집니다. – Dan
@ Dan 예, 그렇게 생각합니다. 점수를 정확히 일치 시키려면 classifier.best_params_를 사용하여 LogisticRegression 객체를 인스턴스화 한 다음 cross_val_score (logReg, X_train, y_train, scoring = 'neg_log_loss')의 결과 평균을 취하십시오. 그래도 random_state를 설정해야합니다. cross_val_score와 GridSearchCV는 명시 적으로 설정되지 않은 경우 동일한 CV 전략을 사용합니다. –