Склеарн: Есть ли способ определить конкретный c тип оценки для конвейера? - PullRequest
2 голосов
/ 29 апреля 2020

Я могу сделать это:

model=linear_model.LogisticRegression(solver='lbfgs',max_iter=10000)
kfold = model_selection.KFold(n_splits=number_splits,shuffle=True, random_state=random_state)
scalar = StandardScaler()
pipeline = Pipeline([('transformer', scalar), ('estimator', model)])
results = model_selection.cross_validate(pipeline, X, y, cv=kfold, scoring=score_list,return_train_score=True)

, где Score_list может быть что-то вроде ['accuracy','balanced_accuracy','precision','recall','f1'].

Я также могу сделать это:

kfold = model_selection.KFold(n_splits=number_splits,shuffle=True, random_state=random_state)
scalar = StandardScaler()
pipeline = Pipeline([('transformer', scalar), ('estimator', model)])
for i, (train, test) in enumerate(kfold.split(X, y)):
    pipeline.fit(self.X[train], self.y[train])
    pipeline.score(self.X[test], self.y[test])

Однако, Я не могу изменить тип счета для конвейера в последней строке. Как я могу это сделать?

1 Ответ

3 голосов
/ 29 апреля 2020

score метод всегда accuracy для классификации и r2 оценка для регрессии. Там нет параметра, чтобы изменить это. Это происходит от Classifiermixin и RegressorMixin.

Вместо этого, когда нам нужны другие опции скоринга, мы должны импортировать его из sklearn.metrics, как показано ниже.

from sklearn.metrics import balanced_accuracy

y_pred=pipeline.score(self.X[test])
balanced_accuracy(self.y_test, y_pred)
...