我试图用随机森林恢复多输出分类器的特征重要性。在
多输出模型没有显示任何问题:
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
实际上,Sklearn的MultiOutputClassifier没有一个属性包含模型中使用的所有估计器(在您的例子中是所有随机森林分类器)的特征重要性的某种合并。在
但是,可以访问每个random森林分类器的特征重要性,然后将它们全部平均在一起,以给出所有random forest分类器中每个特征的平均重要性。在
MultiOutputClassifier对象有一个名为
estimators_
的属性。如果您运行multi_forest.estimators_
,您将得到一个包含每个RandomForest分类器的对象的列表。在对于每一个随机森林分类器对象,您可以通过
feature_importances_
属性访问其特性重要性。在总而言之,我的方法是:
我运行您粘贴到问题中的示例代码,然后运行上面的代码块以输出以下15个平均值的列表:
^{pr2}$它包含了您的15个特性中每一个的平均重要性,跨越MultiOutputClassifier中使用的3个随机林分类器。在
这至少可以帮助您了解,总体上,在为您的3个类进行预测时,哪些特性更为重要。在
相关问题 更多 >
编程相关推荐