2016-06-09 1 views
1

나는 gridsearch에 의해 반환 된 가장 좋은 추정량을 계산할 필요가있는 프로젝트를 수행하고있었습니다.svm을위한 gridsearch를 배우는 기계

parameters = {'gamma':[0.1, 0.5, 1, 10, 100], 'C':[1, 5, 10, 100, 1000]} 

# TODO: Initialize the classifier 
svr = svm.SVC() 

# TODO: Make an f1 scoring function using 'make_scorer' 
f1_scorer = make_scorer(score_func) 

# TODO: Perform grid search on the classifier using the f1_scorer as the scoring method 
grid_obj = grid_search.GridSearchCV(svr, parameters, scoring=f1_scorer) 

# TODO: Fit the grid search object to the training data and find the optimal parameters 
grid_obj = grid_obj.fit(X_train, y_train) 
pred = grid_obj.predict(X_test) 
def score_func(): 
    f1_score(y_test, pred, pos_label='yes') 

# Get the estimator 
clf = grid_obj.best_estimator_ 

나는 내가 gridsearch 객체를 생성 한 후 예측을하기 때문에 f1_scorer의 FUNC를 만드는 방법을 모르겠습니다. 내가 gridsearch 점수 메서드로 사용하기 때문에 obj를 만든 후 f1_scorer 선언 할 수 없습니다. gridsearch에 대해이 채점 기능을 만드는 방법을 알려주십시오.

답변

0
clf = svm.SVC() 

# TODO: Make an f1 scoring function using 'make_scorer' 
f1_scorer = make_scorer(f1_score,pos_label='yes') 

# TODO: Perform grid search on the classifier using the f1_scorer as the scoring method 
grid_obj = GridSearchCV(clf,parameters,scoring=f1_scorer) 

# TODO: Fit the grid search object to the training data and find the optimal parameters 
grid_obj = grid_obj.fit(X_train, y_train) 

# Get the estimator 
clf = grid_obj.best_estimator_ 
0

make_scorer에 전달하는 스코어러 함수는 y_truey_pred을 매개 변수로 취해야합니다. 그 정보로 점수를 계산하는 데 필요한 모든 것을 얻을 수 있습니다. 그러면 GridSearchCV가 가능한 각 매개 변수 집합에 대해 내부적으로 점수 함수를 저장하고 호출합니다. 미리 y_pred를 계산할 필요가 없습니다.

은 다음과 같아야합니다

def score_func(y_true, y_pred): 
    """Calculate f1 score given the predicted and expected labels""" 
    return f1_score(y_true, y_pred, pos_label='yes') 

f1_scorer = make_scorer(score_func) 
GridSearchCV(svr, parameters, scoring=f1_scorer) 
+0

감사합니다! 저것은 percectly 일했다. 내가 물어볼 수 있다면, 어떻게 gridsearch가 독자적으로 예측을 반환합니까? make_scorer 함수와 관련이 있습니까? –

+0

당신이 그것을했던 것과 같은 방식으로, 추정기의'.predict()' 메소드를 사용한다. 내부적으로 데이터를 유효성 검사 및 테스트 세트로 분할합니다. 그런 다음 훈련 세트 ('X_train, y_train'의 하위 집합)에 맞춰 예측하고 내부 테스트 세트 (이는'X_train, y_train'의 하위 세트입니다)와 비교합니다. 그래서'X_test'를 사용하지 않습니다. 그것은 편견없이 최종 모델을 평가하는 것입니다. – elyase