график распределения важности функций

#python #matplotlib #plot #random-forest

#python #matplotlib #график #случайный лес

Вопрос:

Я сделал выбор функций в моем фрейме данных на основе этого: https://towardsdatascience.com/feature-selection-using-random-forest-26d7b747597f

в части 7 для построения графика распределения важности предоставляется этот код:

 pd.series(sel.estimator_,feature_importances_,.ravel()).hist()
  

я думаю, что это должно быть так, чтобы не было синтаксической ошибки:

 pd.series(sel.estimator_,feature_importances_.ravel()).hist()
  

и я получил эту ошибку:

Ошибка атрибута: модуль ‘pandas’ не имеет атрибута ‘series’

и я думаю, что estimator_ и feature_importances_ также не определены. Есть ли какой-либо способ отладить эту строку кода? введите описание изображения здесь

Ответ №1:

 pd.Series(sel.estimator_.feature_importances_.ravel()).hist()
  

Это «Серия», а не «series»

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.hist.html

Построение графика важности функций

 importances = sel.estimator_.feature_importances_
indices = np.argsort(importances)[::-1]
# X is the train data used to fit the model 
plt.figure()
plt.title("Feature importances")
plt.bar(range(X.shape[1]), importances[indices],
       color="r", align="center")
plt.xticks(range(X.shape[1]), indices)
plt.xlim([-1, X.shape[1]])
plt.show()
  

Это должно отображать гистограмму, подобную приведенной ниже, где ось x — индексы функций, а ось y — важность функций. Функции отсортированы в порядке важности.
введите описание изображения здесь

Комментарии:

1. Ошибка имени: имя ‘feature_importances_’ не определено

2. @CFD Обычно feature_importances_ является членом классификаторов на основе дерева / леса. Проверьте, является ли он членом sel в вашем случае, т.е. sel.feature_importances_

3. Это не так. с помощью sel.feature_importances_ получена эта ошибка: AttributeError: объект ‘SelectFromModel’ не имеет атрибута ‘feature_importances_

4. @CFD Сейчас я это исправил, веб-сайт, на котором вы основывали свой код, очень плохо вычитал корректуру: ( Не забудьте использовать plt.show() для отображения гистограммы

5. Спасибо, это сработало. Но этот график не показывает ничего особенного! (обновил вопрос изображением графика)