Пользовательская функция в make_scorer в sklearn - PullRequest
1 голос
/ 13 апреля 2020

Я пытаюсь создать пользовательскую функцию оценки для реализации в GridSearchCV для проблемы классификации и не думаю, что я полностью понимаю, как она работает (я прочитал документацию). Моя цель состоит в том, чтобы придать различный вес типу неправильной классификации Мой код выглядит следующим образом. good и excellent - это два класса, в которые попадают мои образцы. Я думаю, что проблема в том, что GridSearchCV передает истинные и предсказанные значения в score_func, но я не уверен, как это исправить.

def score_func(y, y_pred):
    '''score function for grid search'''
    error = 0
    for i in range(len(y)):
        if y[i] == 'excellent':
            if y_pred[i] == 'excellent':
                error += 10
            elif y_pred[i] == 'good':
                error += 5
    return error

score_f = make_scorer(score_func, needs_proba=False ,needs_threshold=False)

RF = make_pipeline(
        StandardScaler(),
        RandomForestClassifier(random_state=101, criterion = 'gini')
        )

gs_rf = GridSearchCV(estimator=RF, param_grid=param_grid, scoring=score_f, 
                     cv=KFold(5, True, random_state=1234)).fit(X_data,y_data)

Заранее спасибо!

1 Ответ

1 голос
/ 13 апреля 2020

Если ваша цель - связать веса для ваших ярлыков, вам не нужно создавать функцию.

Просто используйте параметр class_weight из RandomForestClassifier.

weight_dict = {'excellent':10, 'good':5}
RandomForestClassifier(random_state=101, criterion='gini', class_weight=weight_dict)
...