【问题标题】:Can I show feature importance for MultiOutputClassifier?我可以显示 MultiOutputClassifier 的特征重要性吗?
【发布时间】:2019-06-30 22:16:14
【问题描述】:

我正在尝试使用 RandomForest 恢复多输出分类器的特征重要性。

MultiOutput 模型没有显示任何问题:

import numpy as np
import pandas as pd
import sklearn
from sklearn.datasets import make_multilabel_classification
from sklearn.datasets import make_classification
from sklearn.multioutput import MultiOutputClassifier
from sklearn.ensemble import RandomForestClassifier

## Generate data
x, y = make_multilabel_classification(n_samples=1000, 
                                      n_features=15, 
                                      n_labels = 5, 
                                      n_classes=3, 
                                      random_state=12, 
                                      allow_unlabeled = True)
x_train = x[:700,:]
x_test  = x[701:,:]
y_train = y[:700,:]
y_test  = y[701:,:]

## Generate model
forest = RandomForestClassifier(n_estimators = 100, random_state = 1)
multi_forest = MultiOutputClassifier(forest, n_jobs = -1).fit(x_train, y_train)

## Make prediction
dfOutput_multi_forest = multi_forest.predict_proba(x_test)

预测dfOutput_multi_forest没有显示任何问题,但我想恢复multi_forest的特征重要性用于解释输出。

使用multi_forest.feature_importance_ 会引发以下错误消息: AttributeError: 'MultiOutputClassifier' object has no attribute 'feature_importance_'

有谁知道如何检索特征重要性? 我正在使用 scikit v0.20.2

【问题讨论】:

    标签: python scikit-learn random-forest


    【解决方案1】:

    确实,Sklearn 的 MultiOutputClassifier 似乎没有包含模型中使用的所有估计器(在您的情况下是所有 RandomForest 分类器)的特征重要性的某种合并的属性。

    但是,可以访问每个 RandomForest 分类器的特征重要性,然后将它们平均在一起,从而为您提供每个特征在所有 RandomForest 分类器中的平均重要性。

    MultiOutputClassifier 对象有一个名为estimators_ 的属性。如果您运行multi_forest.estimators_,您将获得一个列表,其中包含每个 RandomForest 分类器的对象。

    对于每个 RandomForest 分类器对象,您可以通过 feature_importances_ 属性访问其特征重要性。

    总而言之,这是我的方法:

    feat_impts = [] 
    for clf in multi_forest.estimators_:
        feat_impts.append(clf.feature_importances_)
    
    np.mean(feat_impts, axis=0)
    

    我运行了您粘贴到问题中的示例代码,然后运行了上面的代码块以输出以下 15 个平均值的列表:

    array([0.09830467, 0.0912088 , 0.05738045, 0.1211305 , 0.03901933,
           0.05429491, 0.06929378, 0.06404416, 0.05676634, 0.04919717,
           0.05244265, 0.0509295 , 0.05615341, 0.09202444, 0.04780991])
    

    其中包含在 MultiOutputClassifier 中使用的 3 个随机森林分类器中每一个的 15 个特征的平均重要性。

    这至少应该可以帮助您了解总体上哪些特征在对您的 3 个类中的每一个进行预测时往往更重要。

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 2018-12-06
      • 2018-12-14
      • 2021-12-23
      • 2021-02-03
      • 2016-11-07
      • 1970-01-01
      • 2022-07-17
      • 2018-02-11
      相关资源
      最近更新 更多