我可以显示功能对MultiOutputClassifier的重要性吗?

时间:2019-02-06 20:59:13

标签: python scikit-learn random-forest

我正在尝试使用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

1 个答案:

答案 0 :(得分:2)

实际上,似乎Sklearn的MultiOutputClassifier并没有包含该模型中所有估计量(在您的情况下,所有RandomForest分类器)的特征重要性的某种混合形式的属性。 / p>

但是,可以访问每个Ra​​ndomForest分类器的功能重要性,然后将它们平均取平均值,从而在所有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个班级中的每个班级进行预测时更重要。