2016-06-09 3 views
1

Я делал проект, где мне нужно было вычислить лучшую оценку, возвращаемую gridsearch.Машина обучения gridsearch для svm

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_ 

Я не уверен, как сделать f1_scorer FUNC, так как я сделать прогноз после создания объекта gridsearch. Я не могу объявить f1_scorer после создания obj, потому что gridsearch использует его как метод оценки. Пожалуйста, помогите мне, как создать эту функцию подсчета для 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_true и y_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

спасибо! что работало заметно. если я могу спросить, как gridsearch возвращает свои прогнозы самостоятельно? имеет ли он какое-то отношение к функции make_scorer? –

+0

так же, как вы это сделали, используя метод .predict() ' оценки. Он разбивает данные внутри на валидационные и тестовые наборы. Затем подходит для набора тренировок (который является подмножеством 'X_train, y_train') и предсказывает и сравнивает его с внутренним набором тестов (который также является подмножеством' X_train, y_train'). Поэтому он никогда не использует ваш 'X_test'. Это значит, что вы можете оценить свою окончательную модель без предвзятости – elyase

Смежные вопросы