我可以为MultiOutputClassifier显示特征重要性吗?

5

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

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

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_'

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

1个回答

9

实际上,似乎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])

这个指标包含了你的15个特征在3个随机森林分类器中的平均重要性。

这将帮助你看到哪些特征总体上更加重要,对于每一个类别做出预测。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接