Использование cross_validation.cross_val_score с metrics.precision_recall_fscore_support

Я новичок в scikits-learn, и я хотел бы использовать cross_validation.cross_val_score с metrics.precision_recall_fscore_support, чтобы я мог получить все соответствующие показатели перекрестной проверки без необходимости запуска перекрестной проверки один раз для точности, один раз для точности, один раз для отзыва и один раз для f1. Но когда я пытаюсь это сделать, я получаю ValueError:

from sklearn.datasets import fetch_20newsgroups

from sklearn.svm import LinearSVC
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn import metrics
from sklearn import cross_validation
import numpy as np

data_train = fetch_20newsgroups(subset='train', #categories=categories,
                                shuffle=True, random_state=42)
clf = LinearSVC(loss='l1', penalty='l2')
vectorizer = TfidfVectorizer(
  sublinear_tf=False, 
  max_df=0.5,
  min_df=2, 
  ngram_range = (1,1),
  use_idf=False,
  stop_words='english')

X_train = vectorizer.fit_transform(data_train.data)

# Cross-validate:
scores = cross_validation.cross_val_score(
  clf, X_train, data_train.target, cv=5, 
  scoring=metrics.precision_recall_fscore_support)

Вот ошибка:

  File "<stdin>", line 3, in <module>
  File "sklearn/cross_validation.py", line 1148, in cross_val_score
    for train, test in cv)
  File "sklearn/externals/joblib/parallel.py", line 514, in __call__
    self.dispatch(function, args, kwargs)
  File "sklearn/externals/joblib/parallel.py", line 311, in dispatch
    job = ImmediateApply(func, args, kwargs)
  File "sklearn/externals/joblib/parallel.py", line 135, in __init__
    self.results = func(*args, **kwargs)
  File "sklearn/cross_validation.py", line 1075, in _cross_val_score
    score = scorer(estimator, X_test, y_test)
  File "sklearn/metrics/metrics.py", line 1261, in precision_recall_fscore_support
    print beta
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Обратите внимание: вам нужна версия .14-git, чтобы использовать параметр оценки в cross_validation.cross_val_score.

import sklearn
sklearn.__version__

'0.14-git'

person Solomon    schedule 03.04.2013    source источник
comment
Загляните в систему отслеживания ошибок. sklearn.cross_validation Банкомат.   -  person Fred Foo    schedule 03.04.2013
comment
@larsmans Я не видел его в списке, поэтому опубликовал это как новую проблему. Спасибо!   -  person Solomon    schedule 04.04.2013
comment
Как я уже сказал, есть небольшая ошибка. Вам нужно создать объект скорера с помощью AsScorer, чтобы использовать любую функцию в качестве аргумента для скоринга. Но поскольку precision_recall_fscore_support возвращает более одного значения, вам нужно сделать небольшой хак, чтобы заставить его работать.   -  person Andreas Mueller    schedule 04.04.2013
comment
Попробуйте использовать cross_validate (scikit-learn.org/stable/modules/), который имеет параметры подсчета очков, а не cross_val_score..   -  person Ankit Sharma    schedule 13.07.2018


Ответы (1)


Вам следует обновить научный комплект до последней версии 0.16.

Параметры оценки см. на этой странице

Не все sklearn.metrics работают и названия разные. Принимаются следующие параметры:

ValueError: 'wrong_choice' is not a valid scoring value. Valid options are        
['accuracy', 'adjusted_rand_score', 'average_precision', 'f1', 'f1_macro', 
'f1_micro', 'f1_samples', 'f1_weighted', 'log_loss', 'mean_absolute_error', 
'mean_squared_error', 'median_absolute_error', 'precision',   
'precision_macro', 'precision_micro', 'precision_samples', 
'precision_weighted', 'r2', 'recall', 'recall_macro', 'recall_micro', 
'recall_samples', 'recall_weighted', 'roc_auc']
person Ty Shaikh    schedule 24.07.2015