3

이 질문은 파이썬 라이브러리 scikit-learn에 매우 특정한 내용입니다. 다른 곳에 게시하는 것이 더 좋은지 알려주세요. 감사! 이제 질문scikit-learn에서 학습 신경망을 조기에 중지

은 ...

나는 SGD와 함께 훈련 BaseEstimator에 따라 ffnn 피드 포워드 신경망 클래스가 있습니다. 잘 작동하고 있으며 GridSearchCV()를 사용하여 병렬로 교육 할 수 있습니다.

이제는 ffnn.fit() 함수에서 조기 중지를 구현하려고하지만이 경우 배의 유효성 검사 데이터에 액세스해야합니다. 이 일을하는 한 가지 방법은 무엇인가에

clf.fit(X_train, y_train, **fit_params) 

처럼
clf.fit(X_train, y_train, X_test, y_test, **fit_params) 

을 말한다 sklearn.grid_search.fit_grid_point의 선()을 변경하고 이러한 인수를 위해 ffnn.fit()를 변경하는 것입니다. 이것은 sklearn의 다른 분류 자들에게도 영향을 미치므로 문제가됩니다. 위의 두 가지 방법 중 하나에서 clf.fit()을 호출 할시기를 알려주는 fit_grid_point()에서 어떤 종류의 플래그를 검사하여이를 피할 수 있습니다.

누군가 내가 sklearn 라이브러리의 코드를 편집 할 필요가없는 다른 방법을 제안 할 수 있습니까?

또는 X_train과 y_train을 무작위로 열차/유효성 집합으로 나누고 좋은 정지 점을 확인한 다음 모든 X_train에서 모델을 다시 훈련 할 수 있습니까?

감사합니다.

답변

7

예를 들어 train_test_split 함수를 사용하여 전달 된 X_trainy_train에서 신경망 모델을 내부적으로 추출 할 수 있습니다.

편집 : 또는

, 더 X_train 분할 기차로 y_train 옳은 것/유효성 검사가 좋은 정지 지점을 무작위로 확인 설정, 다음 X_train 모두에 모델을 다시 훈련?

예. 그렇지만 비용이 많이들 것입니다. 중지 지점을 찾은 다음 중지 지점을 찾는 데 사용한 유효성 검사 데이터를 한 번만 추가로 전달할 수 있습니다. x_train 및 x_test 분할을 복용하는 동안

:

첫째 :

+0

감사합니다! @ogrisel : 유효성 검사 데이터를 한 번 통과해도 충분합니까? 다중 패스로 더 좋은 결과를 얻을 수 있는지 어떻게 확인할 수 있습니까? – user1953384

+0

최종 테스트 점수와 원래의 테스트 방법 점수를 비교할 수 있지만 비용이 많이 드는 방법입니다. – ogrisel

+0

감사합니다. 사소한 질문에 대해 유감스럽게 생각합니다. 그것은 물론 할 일입니다 :). – user1953384

0

는 두 가지 방법이 있습니다. 당신은 0을 취할 수 있습니다.

x_train, x_test, y_train, y_test = train_test_split(data_x, data_y, test_size=0.25) 

x_train, x_dev, y_train, y_dev = train_test_split(x_train, y_train, test_size=0.1) 

clf = GridSearchCV(YourEstimator(), param_grid=param_grid,) 
clf.fit(x_train, y_train, x_dev, y_dev) 

을 그리고 당신의 추정은 x_dev 다음과 같은 및 구현 초기 정지 모양을, y_dev

class YourEstimator(BaseEstimator, ClassifierMixin): 
    def __init__(self, param1, param2): 
     # perform initialization 
     # 

    def fit(self, x, y, x_dev=None, y_dev=None): 
     # perform training with early stopping 
     # 

둘째

: x_train 1 분할 및 검증 x_dev을 위해 그것을 유지 x_train에서 두 번째 분할은 수행하지 않지만 Estimator의 fit 메소드에서 설정된 dev을 꺼내겠습니다

x_train, x_test, y_train, y_test = train_test_split(data_x, data_y, test_size=0.25) 

clf = GridSearchCV(YourEstimator(), param_grid=param_grid) 
clf.fit(x_train, y_train) 

그리고 당신의 추정은 다음과 같이 표시됩니다

class YourEstimator(BaseEstimator, ClassifierMixin): 
    def __init__(self, param1, param2): 
     # perform initialization 
     # 

    def fit(self, x, y): 
     # perform training with early stopping 
     x_train, x_dev, y_train, y_dev = train_test_split(x, y, 
                 test_size=0.1)