我有一个分类问题,我必须找到前三个功能 使用具有PCA,xgboost,RANDOM FOREST, 物流登记册和决策树。
我是一个初学者,我不知道如何使用投票分类器来获得功能的重要性。
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的投票分类器,应该让我知道变量的特征重要性。
答案 0 :(得分:0)
您可以从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
由于您要组装的算法具有根本不同的“特征重要性”概念,所以我认为没有一种明确的方法可以确定哪些特征对综合结果最重要。
答案 1 :(得分:0)
我遇到了同样的问题,但是,Robert King 的方法不起作用,因为 VotingRegressor(我正在使用回归)有几个带有估算器的字段,并且在 named_estimators 字段中,它们'未安装,因此无法进行特征重要性提取。您可以在第二张图片中看到其中一个命名估算器的样子。
具有拟合估计量的正确字段是 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_ 没有名称。