Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以显示多输出分类器的特征重要性吗?_Python_Scikit Learn_Random Forest - Fatal编程技术网

Python 我可以显示多输出分类器的特征重要性吗?

Python 我可以显示多输出分类器的特征重要性吗?,python,scikit-learn,random-forest,Python,Scikit Learn,Random Forest,我正在尝试使用随机林恢复多输出分类器的特征重要性 多输出模型没有显示任何问题: 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 MultiOutputClas

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

多输出模型没有显示任何问题:

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\u multi\u-forest
没有显示任何问题,但我想恢复multi\u-forest的特征重要性,以便解释输出

使用
multi\u-forest.feature\u-importance\u
会抛出以下错误消息:
AttributeError:“MultiOutputClassifier”对象没有属性“feature\u重要性”

有人知道如何检索功能重要性吗?
我使用的是scikit v0.20.2

事实上,Sklearn的属性似乎没有包含模型中使用的所有估计器(在您的案例中,所有随机森林分类器)的特征重要性的某种合并

但是,可以访问每个RandomForest分类器的特征重要性,然后对它们进行平均,以获得所有RandomForest分类器中每个特征的平均重要性

多输出分类器对象有一个名为
估计器的属性。如果运行
multi\u-forest.estimators\u
,您将获得一个列表,其中包含每个随机森林分类器的对象

对于这些RandomForest分类器对象中的每一个,您都可以通过
feature\u importances\u
属性访问其特征重要性

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

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])
它包含15个功能中每个功能的平均重要性,在多输出分类器中使用的3个随机林分类器中

这至少有助于您了解,总体而言,在预测3个类中的每一个类时,哪些特性更为重要