我能展示多输出分类器的特征重要性吗?

2024-04-19 01:29:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用随机森林恢复多输出分类器的特征重要性。在

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

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.feature_importance_会引发以下错误消息: AttributeError: 'MultiOutputClassifier' object has no attribute 'feature_importance_'

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


Tags: fromtestimportmakeas森林train特征
1条回答
网友
1楼 · 发布于 2024-04-19 01:29:09

实际上,Sklearn的MultiOutputClassifier没有一个属性包含模型中使用的所有估计器(在您的例子中是所有随机森林分类器)的特征重要性的某种合并。在

但是,可以访问每个random森林分类器的特征重要性,然后将它们全部平均在一起,以给出所有random forest分类器中每个特征的平均重要性。在

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

对于每一个随机森林分类器对象,您可以通过feature_importances_属性访问其特性重要性。在

总而言之,我的方法是:

feat_impts = [] 
for clf in multi_forest.estimators_:
    feat_impts.append(clf.feature_importances_)

np.mean(feat_impts, axis=0)

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

^{pr2}$

它包含了您的15个特性中每一个的平均重要性,跨越MultiOutputClassifier中使用的3个随机林分类器。在

这至少可以帮助您了解,总体上,在为您的3个类进行预测时,哪些特性更为重要。在

相关问题 更多 >