我正在研究多标签分类问题,二进制案例。作为一个目标变量,有5个0-1值的列。
对于模型培训,我使用scikit多学科图书馆。下面是我的代码,用于训练具有二进制相关性和RandomForest的模型。
parameters = [
{
'classifier': [RandomForestClassifier(random_state=42)],
'classifier__n_estimators': [50, 100, 200],
'classifier__max_features': ['auto', 'sqrt', 'log2'],
'classifier__max_depth' : [4, 6, 8, 10, 12],
'classifier__criterion' :['gini', 'entropy']}]
clf = RandomizedSearchCV(BinaryRelevance(), parameters, scoring='f1_weighted', cv=5, \
n_jobs=-1, verbose=10, random_state=10)
clf.fit(X_train, y_train)
如何从模型中提取特征重要性?我应该从这个模型中获取最好的参数,然后使用sklearn的RandomForest分别应用于每个标签的数据吗?
发布于 2020-02-11 13:56:31
首先,为了直接回答您的问题,使用scikit学习获得特性重要性的最简单方法是这样做,其中model
是保持分类器的变量。
print(model.feature_importances_)
但是,这种方法只存在于某些集合模型上,即:
如果你想知道为什么,网上有一本关于可解释机器学习的非常棒的免费书。以下是一段节选:
实现可解释性的最简单方法是只使用创建可解释模型的算法子集。线性回归、logistic回归和决策树是常用的可解释模型。
一旦您选择了正确的模型,请注意使用特性重要性!看这里,它对随机数据的排名非常高。本文建议使用置换重要性以及下拉列重要性。
他们创建了一个名为拉皮条客的库来做这件事,但是这里有一个教程却从scikit自己那里学到了如何做到这两种方法--学习。我在下面的教程中粘贴了置换重要性示例:
from sklearn.inspection import permutation_importance
result = permutation_importance(rf, X_test, y_test, n_repeats=10,
random_state=42, n_jobs=2)
sorted_idx = result.importances_mean.argsort()
fig, ax = plt.subplots()
ax.boxplot(result.importances[sorted_idx].T,
vert=False, labels=X_test.columns[sorted_idx])
ax.set_title("Permutation Importances (test set)")
fig.tight_layout()
plt.show()
https://datascience.stackexchange.com/questions/67892
复制相似问题