#python #numpy #scikit-learn #permutation #logistic-regression
#python #numpy #scikit-learn #перестановка #логистическая регрессия
Вопрос:
У меня есть обученная модель, и все работает нормально. И я вычисляю важность перестановки каждого веса объекта. Я использую eli5.show_weights()
, но он отображает выходные данные как html
, но мне нужно, чтобы он преобразовывался в какой-то список или массив, чтобы я мог получить доступ к значениям.
вот мой пример кода, исключая estimator's
часть кода, чтобы упростить его:
import eli5
from eli5.sklearn import PermutationImportance
perm = PermutationImportance(estimator, random_state=1).fit(X_testdf, y_testdf)
eli5.show_weights(perm, feature_names = X_testdf.columns.tolist())
Это работает нормально, но мне нужно получить значения, выводимые eli5.show_weights(..)
в массив или любую переменную, чтобы я мог получить доступ к этим значениям.
Я тоже пытался, но безуспешно
np.array(eli5.show_weights(perm, feature_names=X.columns.tolist()))
Может кто-нибудь мне помочь?
Ответ №1:
Веса или значения функций хранятся в объекте permutation, так что вы можете извлечь их напрямую:
perm.feature_importances_
Например, это может возвращать массив типа
array([0. , 0.008, 0.584, 0.172]) # Only the mean, not the Std.Dev.
Если они вам нужны вместе с именами функций, вы можете сжать имена и значения функций:
list(zip(X_test.columns.tolist(), perm.feature_importances_))
Кроме того, вы также можете преобразовать отображение HTML обратно в необработанный HTML, а затем прочитать его с помощью Pandas. Пример:
w = eli5.show_weights(perm, feature_names=feature_names)
result = pd.read_html(w.data)[0]
result
(пример вывода с iris
набором данных)
Weight Feature
0.5840 ± 0.1170 petal_length
0.1720 ± 0.0697 petal_width
0.0080 ± 0.0196 sepal_width
0 ± 0.0000 sepal_length
Хотя обратите внимание, что Weight
столбец здесь является строкой, поэтому вам придется выполнить некоторые дополнительные манипуляции.
Комментарии:
1. Если это строка, как установить точность?
Ответ №2:
Я ссылаюсь на сообщение Тани и получаю список со следующим кодом.
result = [(x[0], x[1], x[2]) for x in zip(perm_import.feature_importances_, perm_import.feature_importances_std_, X_train.columns)]
result.sort(key=lambda x: x[0], reverse=True)
print(result)