对于使用sklearn Random Forest classifi的每个类,Eli5 explain_weights不返回特征重要性

2024-04-23 08:47:01 发布

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

我在scikit learn的随机林分类器上使用eli5explain_weights函数。我在eli5documentation(第30-31页)中看到,这个函数能够返回每个类的特征重要性(平均权重+标准差)来预测。但是,当在我的数据集中使用它时,函数只返回整个模型的特性重要性(而不是每个类)。在

这里是一个用scikit-learn make_classification函数生成的可复制示例:

import pandas as pd
import eli5
from eli5.sklearn import PermutationImportance
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

x, y = datasets.make_classification(n_samples=200, n_features=5, n_informative=3, n_redundant=2, n_classes=4)
df = pd.concat([pd.DataFrame(x, columns=['feat_1', 'feat_2', 'feat_3', 'feat_4', 'feat_5']), pd.DataFrame(y, columns=['classe'])], axis=1)
df = df.replace({'classe': {0: '1st', 1: '2nd', 2: '3rd', 3: '4th'}})

labels = pd.unique(df['classe'])

train, test = train_test_split(df, stratify=df['classe'], test_size=0.40)

rf = RandomForestClassifier()
rf.fit(train[['feat_1', 'feat_2', 'feat_3', 'feat_4', 'feat_5']], train['classe'])

perm = PermutationImportance(rf).fit(test[['feat_1', 'feat_2', 'feat_3', 'feat_4', 'feat_5']], test['classe'])
var_imp_classes = eli5.explain_weights(perm, top=5, targets=labels, target_names=labels, feature_names=['feat_1', 'feat_2', 'feat_3', 'feat_4', 'feat_5'])

print(eli5.format_as_text(var_imp_classes))

我已经重命名了特性和类,但这不是强制性的。同样,通过将eli5.explain_weights中的perm参数替换为rf,可以避免PermutationImportance步骤。在

此代码返回以下内容:

^{pr2}$

我找不到每个类的详细结果,如this question所示。我使用的是explain_weights函数show_weights,因为我希望将输出存储在一个数据帧中,但是在使用show_weights时也会出现同样的问题。我在使用其他分类器(如SGDClassifier)以及删除PermutationImportance步骤后也会遇到相同的问题。在

我的代码怎么了?在

谢谢大家!在


Tags: 函数fromtestimportdftrainsklearnclasses
1条回答
网友
1楼 · 发布于 2024-04-23 08:47:01

我不认为你的代码有什么问题
在您给出的示例中,ELI5为每个类提供了解释,因为它用于Logistic回归模型,该模型对每个类都有单独的回归系数。
这在随机林中不会发生,特别是如果使用置换重要性。这些只是在使用给定的置换变量进行预测时模型精度的降低,因此每个模型只有一个,而不是每个类一个。人们可以考虑到每一个类的分类准确度的降低-这些可能给出一个总体的想法,但我不确定它们是否一致。

如果您真的需要知道哪些变量对于每个类别来说是最独特的,那么您可以运行K(假设您有K个类)与其他二进制分类RFs分开运行,并使用这些置换重要性作为指标。在

相关问题 更多 >