Scikit-learn: precision_recall_fscore_support возвращает странные результаты

Я занимаюсь анализом/классификацией текста и пытаюсь оценить производительность с помощью функции precision_recall_fscore_support из модуля sklearn.metrics. Я не уверен, как я могу создать действительно небольшой пример, воспроизводящий проблему, но, возможно, кто-то может помочь даже в этом случае, потому что это что-то очевидное, что мне не хватает.

Вышеупомянутая функция возвращает среди прочего поддержку для каждого класса. В документации указано

поддержка: целое число (если среднее значение не равно None) или массив целых чисел, shape = [n_unique_labels]: количество вхождений каждой метки в y_true.

Но в моем случае количество классов, для которых возвращается поддержка, не совпадает с количеством разных классов в данных тестирования.

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5)

classifier = svm.SVC(kernel="linear")
classifier.fit(X_train, y_train)

y_pred = classifier.predict(X_test)
prec, rec, fbeta, supp = precision_recall_fscore_support(y_test, y_pred)

print(len(classifier.classes_)) # prints 18
print(len(supp))                # prints 19
print(len(np.unique(y_test)))   # prints 18

Как это может быть? Как может быть поддержка класса, которого нет в данных?


person oarfish    schedule 05.02.2016    source источник
comment
пожалуйста, исправьте свой код (kernel=kernel=linear недействителен) и предоставьте примеры данных, для которых это происходит   -  person lejlot    schedule 05.02.2016


Ответы (1)


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

prec, rec, fbeta, supp = precision_recall_fscore_support(y_test, y_pred, labels=classifier.classes_)
person oarfish    schedule 05.02.2016