#python #numpy #scikit-learn
#python #numpy #scikit-learn
Вопрос:
В методе sklearn predict_proba()
обычно мы рассматриваем только тот, который имеет наибольшую вероятность. Как я могу вывести вероятность для верхних n классов (n> 1)?
Например, вывод из predict_proba()
выглядит следующим образом, как я могу вернуть 2 наивысшие вероятности и связанные с ними классы?
result_prob = clf.predict_proba(X_test)
Возврат:
array([
2.55420153e-02, 0.00000000e 00, 0.00000000e 00, 0.00000000e 00,
3.41739673e-02, 0.00000000e 00, 0.00000000e 00, 0.00000000e 00,
0.00000000e 00, 0.00000000e 00, 2.11688875e-05, 0.00000000e 00,
0.00000000e 00, 0.00000000e 00, 8.02579585e-01, 0.00000000e 00,
0.00000000e 00, 1.37978949e-02, 0.00000000e 00, 0.00000000e 00,
0.00000000e 00, 1.15640553e-02, 0.00000000e 00, 0.00000000e 00,
0.00000000e 00, 0.00000000e 00, 0.00000000e 00, 6.76391638e-02,
9.06030431e-03, 0.00000000e 00, 0.00000000e 00, 0.00000000e 00,
0.00000000e 00, 0.00000000e 00, 3.56218448e-02, 0.00000000e 00,
0.00000000e 00, 0.00000000e 00, 0.00000000e 00])
В этом случае должны быть возвращены классы с вероятностью 8.02579585e-01
и 6.76391638e-02
.
Ответ №1:
На самом деле это простой вопрос; вы могли бы использовать np.argpartition
:
import numpy as np
x =np.array([
2.55420153e-02, 0.00000000e 00, 0.00000000e 00, 0.00000000e 00,
3.41739673e-02, 0.00000000e 00, 0.00000000e 00, 0.00000000e 00,
0.00000000e 00, 0.00000000e 00, 2.11688875e-05, 0.00000000e 00,
0.00000000e 00, 0.00000000e 00, 8.02579585e-01, 0.00000000e 00,
0.00000000e 00, 1.37978949e-02, 0.00000000e 00, 0.00000000e 00,
0.00000000e 00, 1.15640553e-02, 0.00000000e 00, 0.00000000e 00,
0.00000000e 00, 0.00000000e 00, 0.00000000e 00, 6.76391638e-02,
9.06030431e-03, 0.00000000e 00, 0.00000000e 00, 0.00000000e 00,
0.00000000e 00, 0.00000000e 00, 3.56218448e-02, 0.00000000e 00,
0.00000000e 00, 0.00000000e 00, 0.00000000e 00])
k = 2 # top-k
ind = np.argpartition(x, -k)[-k:]
x[ind]
Результат:
array([0.06763916, 0.80257959])
согласно запросу, пока соответствующие классы находятся в ind
:
ind
# array([27, 14])
Комментарии:
1. Спасибо, тогда как я могу найти связанный класс из двух возвращаемых значений?