Вектор Feature_importance в деревьях решений в SciKit изучается вместе с именами функций

#python #scikit-learn #decision-tree

#python #scikit-learn #дерево решений

Вопрос:

Я запускаю алгоритм деревьев решений из SciKit Learn и хочу получить вектор Feature_importance вместе с именами функций, чтобы я мог определить, какие функции являются доминирующими в процессе маркировки. Не могли бы вы мне помочь? Спасибо.

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

1. опубликуйте хотя бы то, что вы пробовали. Более того, sklearn документация API действительно понятна

Ответ №1:

Предположим, что у вас есть образцы в виде строк pandas.DataFrame :

 from pandas import DataFrame
features = DataFrame({'f1': (1, 2, 2, 2), 'f2': (1, 1, 1, 1), 'f3': (3, 3, 1, 1)})
labels = ('a', 'a', 'b', 'b')
  

а затем используйте классификатор дерева или леса:

 from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier()
classifier.fit(features, labels)
  

Тогда значения должны соответствовать столбцам фрейма:

 for name, importance in zip(features.columns, classifier.feature_importances_):
    print(name, importance)

# f1 0.0
# f2 0.0
# f3 1.0
  

Ответ №2:

Хорошее предложение от wrwrwr! Поскольку порядок значений важности объектов в свойстве ‘feature_importances_’ классификатора совпадает с порядком имен объектов в ‘feature.columns’, вы можете использовать функцию zip().

Кроме того, также полезно отсортировать функции и выбрать N лучших функций для отображения.

Допустим, вы создали классификатор:

 clf = DecisionTreeClassifier(random_state=0).fit(X_train,y_train)
  

Затем вы можете распечатать 5 лучших функций в порядке убывания важности:

 for importance, name in sorted(zip(clf.feature_importances_, X_train.columns),reverse=True)[:5]:
    print (name, importance)