【问题标题】:Finding top 3 feature importance using Ensemble Voting Classifier使用 Ensemble Voting Classifier 查找前 3 个特征重要性
【发布时间】:2020-02-25 19:55:57
【问题描述】:

我有一个分类问题,我必须找到前 3 个特征 使用具有 PCA、xgboost、RANDOM FOREST 的 VOTING CLASSIFIER 方法, LOGISTIC REG 和决策树。

我是初学者,我不知道如何使用投票分类器来获取特征重要性。

from sklearn.linear_model import LogisticRegression  
from sklearn.ensemble import RandomForestClassifier  
from sklearn.ensemble import GradientBoostingClassifier  
from sklearn.decomposition import PCA  
from sklearn.ensemble import VotingClassifier   

log_clf = LogisticRegression(random_state=2)

rnd_clf = RandomForestClassifier
(n_estimators=150, max_depth=3, min_samples_leaf=6, 
max_features=0.3, n_jobs=-1, random_state=2)

gbm_clf= GradientBoostingClassifier 
(n_estimators=150, max_depth=3, min_samples_leaf=3, max_features=0.3, 
learning_rate=0.05, subsample=0.4,random_state=2)`

estimators = [('lr', log_clf), ('rf', rnd_clf), ('gbm', gbm_clf)]

voting_clf = VotingClassifier(estimators=estimators,voting='hard')

voting_clf.fit(train.drop(['target'],1),train['target'])

例外:它应该给我使用具有 pca、xgboost、dt、rf 和 lr 的投票分类器的变量的特征重要性。

【问题讨论】:

  • 我不明白您是如何使用 PCA 的。您已经在上面的示例代码中导入了它,但没有在任何地方使用它。此外,PCA 是一种降维方法,而不是分类算法。
  • 是的,因为我知道如何在投票分类器中使用 pca。当我遇到这个问题时,我什至感到困惑。所以,我只是在寻找任何方法。
  • 一种可能性是在使用其他分类器之前使用 PCA 将维度降低到 3,例如请参阅此处的用户指南:scikit-learn.org/stable/auto_examples/decomposition/… 但这并不是您真正要求的。这是作业问题吗?你能告诉我们更多关于你想要达到的目标的细节吗?

标签: python machine-learning scikit-learn classification ensemble-learning


【解决方案1】:

您可以从 voting_clf 对象访问底层分类器并提取这些分类器的特征重要性。 例如:

for alg in voting_clf.named_estimators:
    clf = voting_clf.named_estimators[alg]
    # extract feature importance for clf
    # Note different algorithms have different 
    # methods for feature importance

由于您正在使用具有根本不同的“特征重要性”概念的集成算法,我认为没有明确定义的方法来确定哪些特征在集成结果中最重要。

【讨论】:

    【解决方案2】:

    我也遇到过同样的问题,但是,Robert King 的方法不起作用,因为 VotingRegressor(我正在处理回归)有几个带有估算器的字段,并且在字段 named_estimators 他们' re 未拟合,因此无法进行特征重要性提取。您可以在第二张图片中看到其中一个命名估算器的外观。

    具有拟合估计器的正确字段是 named_estimators_,它看起来像:

    以及获取所有重要性的代码

        def __get_feature_importances(self, train_columns):
        feature_imp = dict()
        for est in self.model.estimators_:
            if type(est) == catboost.core.CatBoostRegressor:
                feature_imp['catboost'] = dict(zip(train_columns, est.feature_importances_))
            elif type(est) == lightgbm.sklearn.LGBMRegressor:
                feature_imp['lgbm'] = dict(zip(train_columns, est.feature_importances_))
            elif type(est) == xgboost.sklearn.XGBRegressor:
                feature_imp['xgboost'] = dict(zip(train_columns, est.feature_importances_))
        return feature_imp
    

    我们必须按类型比较它们,因为 named_estimators_ 没有名称。

    【讨论】:

      猜你喜欢
      • 2021-11-13
      • 2020-09-15
      • 1970-01-01
      • 2020-12-22
      • 2019-12-04
      • 2019-04-24
      • 2017-11-14
      • 2021-02-20
      相关资源
      最近更新 更多