GridSearch의 출력을 사용하는 방법?


23

저는 현재 Python 및 Scikit과 함께 분류 목적으로 배우고 GridSearch에 대해 약간의 독서를하고 있습니다. 최상의 결과를 얻도록 견적 매개 변수를 최적화하는 데 좋은 방법이라고 생각했습니다.

내 방법론은 다음과 같습니다.

  1. 내 데이터를 훈련 / 테스트로 나눕니다.
  2. 5Fold Cross 검증과 함께 GridSearch를 사용하여 내 추정기 (Random Forest, Gradient Boost, SVC 등)를 훈련하고 테스트하여 최적의 하이퍼 파라미터 조합으로 최상의 추정기를 얻습니다.
  3. 그런 다음 분류를 예측하고 실제 클래스 레이블과 비교하기 위해 테스트 세트를 사용하여 Precision, Recall, FMeasure 및 Matthews Correlation Coefficient와 같은 각 추정기의 메트릭을 계산합니다.

나는이 단계에서 이상한 행동을보고 어떻게 진행해야할지 확신 할 수 없습니다. GridSearch에서 .best_estimator_를 가져 와서 그리드 검색의 '최적화'출력으로 사용 하고이 추정기를 사용하여 예측을 수행합니까? 이 작업을 수행하면 3 단계 메트릭이 일반적으로 모든 교육 데이터를 학습하고 테스트 세트에서 테스트하는 것보다 일반적으로 훨씬 낮습니다. 또는 출력 GridSearchCV 객체를 새 추정기로 간단히 가져 옵니까 ? 이 작업을 수행하면 3 단계 메트릭의 점수가 높아지지만 의도 된 분류 자 ​​(예 : 임의의 포리스트) 대신 GridSearchCV 개체를 사용하는 것이 이상해 보입니다.

편집 : 그래서 내 질문은 반환 된 GridSearchCV 객체와 .best_estimator_ 속성의 차이점은 무엇입니까? 추가 측정 항목을 계산할 때이 중 어떤 것을 사용해야하나요? 이 출력을 일반 분류기처럼 사용할 수 있습니까 (예 : 예측 사용) 아니면 어떻게 사용해야합니까?

답변:


27

저의 질문을 만족시킬만한 답을 찾아서 궁금한 점이 있으면 여기에 적어두기로 결정했습니다.

.best_estimator_ 속성은 지정된 모델 유형의 인스턴스이며 param_grid에서 지정된 매개 변수의 '최상의'조합을 갖습니다. 이 인스턴스가 유용한 지 여부는 refit 매개 변수가 True로 설정되어 있는지 여부에 따라 다릅니다 (기본값). 예를 들면 다음과 같습니다.

clf = GridSearchCV(estimator=RandomForestClassifier(), 
                    param_grid=parameter_candidates,
                    cv=5,
                    refit=True,
                    error_score=0,
                    n_jobs=-1)

clf.fit(training_set, training_classifications)
optimised_random_forest = clf.best_estimator_
return optimised_random_forest

RandomForestClassifier를 반환합니다. 이것은 모두 문서 에서 분명하다 . 설명서에서 명확하지 않은 것은 대부분의 예제가 .best_estimator_를 구체적으로 사용하지 않고 대신 수행하는 이유입니다.

clf = GridSearchCV(estimator=RandomForestClassifier(), 
                    param_grid=parameter_candidates,
                    cv=5,
                    refit=True,
                    error_score=0,
                    n_jobs=-1)

clf.fit(training_set, training_classifications)
return clf

이 두 번째 방법은 .best_estimator_, .best_params 등과 같은 GridSearchCV의 모든 종소리와 휘파람이 포함 된 GridSearchCV 인스턴스를 반환합니다.

Optimised Random Forest Accuracy:  0.916970802919708
[[139  47]
 [ 44 866]]
GridSearchCV Accuracy:  0.916970802919708
[[139  47]
 [ 44 866]]

예측을 할 때 동일한 최상의 추정기 인스턴스를 사용합니다. 따라서 실제로 Estimator 인스턴스 자체 만 원하지 않는 한이 둘 사이에는 차이가 없습니다. 참고로, 메트릭의 차이점은 관련이 없으며 버그가있는 클래스 가중치 함수와 관련이 있습니다.


귀하의 게시물 @ Dan에 감사드립니다. 매우 유용합니다. 한 가지 설명을 요청하고 싶었습니다. 후자의 경우에, 나는 경우 refit=False다음 clf.fit최선의 분류와 함께 할 수없는 것입니까?
Poete Maudit

@PoeteMaudit refit 매개 변수는 GridSearchCV 함수가 찾은 최상의 매개 변수를 가져와 전체 데이터 집합에서 해당 매개 변수를 사용하여 모델을 다시 학습하도록합니다. refit = False이면 문서에 따라 best_estimator를 사용할 수 없습니다. scikit-learn.org/stable/modules/generated/…
Dan Carter

0

GridSearchCV를 사용하면 추정기를 그리드 검색 프리앰블과 결합하여 하이퍼 파라미터를 조정할 수 있습니다. 이 방법은 그리드 검색에서 최적의 파라미터를 선택하여 사용자가 선택한 추정기와 함께 사용합니다. GridSearchCV는 분류기에서 메소드를 상속하므로 GridSearchCV 인터페이스를 통해 .score, .predict 등을 직접 사용할 수 있습니다. 그리드 검색으로 식별 된 최상의 하이퍼 파라미터를 추출하려면 .best_params_를 사용하면 최상의 하이퍼 파라미터가 반환됩니다. 그런 다음이 하이퍼 파라미터를 추정기로 개별적으로 전달할 수 있습니다.

.predict를 직접 사용하면 .best_param_을 통해 최상의 하이퍼 파라미터를 얻은 다음 모델에서 사용하는 것과 동일한 결과를 얻을 수 있습니다. 그리드 검색의 기본 작업을 이해함으로써 이것이 왜 그런지를 알 수 있습니다.


그리드 검색

이 기술은 알고리즘과 함께 사용할 최적의 매개 변수를 찾는 데 사용됩니다. 이것은 가중치 또는 모델이 아니며 데이터를 사용하여 학습됩니다. 이것은 상당히 혼란 스러우므로 하나의 하이퍼 매개 변수를 호출하여 이러한 매개 변수를 구별합니다.

하이퍼 파라미터는 k-Nearest Neighbors (k-NN)의 k와 같습니다. k-NN은 사용자가 거리를 계산할 때 고려해야 할 이웃을 선택해야합니다. 그런 다음 알고리즘은 매개 변수 인 임계 값을 조정하여 새로운 예제가 학습 된 분포 내에 있는지 확인합니다. 이는 데이터로 수행됩니다.

k를 어떻게 선택합니까?

일부 사람들은 단순히 과거 데이터 유형 연구를 기반으로 권장 사항을 따릅니다. 다른 사람들은 그리드 검색을 사용합니다. 이 방법을 사용하면 데이터에 가장 적합한 k를 결정할 수 있습니다.

어떻게 작동합니까?

[1,2,,...,10]

이것은 테스트 데이터를 사용하지 않는 원칙에 위배됩니다 !!

1

선택된 하이퍼 파라미터 값은 n- 폴드에서 가장 높은 평균 성능을 달성하는 값입니다. 알고리즘에 만족하면 테스트 세트에서 알고리즘을 테스트 할 수 있습니다. 테스트 세트로 바로 가면 과적 합의 위험이 있습니다.


안녕하세요 Jah, 이것은 좋은 답변이지만 여전히 내 질문에 대한 답변에 대한 현명한 사람은 없습니다. 질문 제목과 질문 자체를 업데이트하여 더 명확하게 시도했습니다.
Dan Carter

자신의 그리드 검색을 작성하십시오. 말 그대로 배열을 만든 다음 모델 주위에 for 루프를 추가합니다. 그런 다음 for 루프가 끝나면 결과 성능을 배열에 기록하십시오. 그리드에서 가능한 모든 값을 살펴본 후 성능 배열을보고 가장 좋은 값을 선택하십시오. 이것이 하이퍼 파라미터에 대한 최적의 값입니다. 기본적으로 내장 기능에 의존하는 것은 데이터 과학에 권장되지 않습니다. 데이터는 매우 다양하며 제어 할 수있는 최선의 방법입니다!
JahKnows

최적화 할 하이퍼 파라미터가 하나 밖에 없지만 4 개가 있다면 좋은 제안입니다. 5? for 루프에 4/5 번 중첩 된 것은 추악하며 여기에서 바퀴를 재발 명 할 필요가 없다는 것을 알았습니다. 시간 낭비 일 것입니다. 이와 같은 패키지가 존재하는 이유입니다.
Dan Carter

GridSearchCV를 사용하면 추정기를 GridSearchCV 설정과 결합 할 수 있습니다. 우리가 방금 논의한 것과 정확히 일치합니다. 그런 다음 최적의 매개 변수를 선택하고 선택한 추정기로 사용합니다. GridSearchCV는 분류기에서 메소드를 상속하므로 GridSearchCV 인터페이스를 통해 .score, .predict 등을 직접 사용할 수 있습니다. 그러나이 작업을 수행하지 않는 것이 더 쉬운 도구는 제어력이 떨어집니다. 그리드 검색처럼 단순한 것을 위해서는 직접 코딩하십시오.
JahKnows

1
이 답변은 GridSearchCV 사용에 관한 질문을 다루지 않습니다.
Hobbes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.