如何从 GridsearchCV 获取 feature_importances_

Posted

技术标签:

【中文标题】如何从 GridsearchCV 获取 feature_importances_【英文标题】:How do I get feature_importances_ from GridsearchCV 【发布时间】:2020-07-28 22:39:03 【问题描述】:

我对编程很陌生,这个问题可能很容易解决,但我已经坚持了一段时间,我认为我的方法显然是错误的。 正如标题所示,我一直在尝试对我的 RandomForest 预测实施网格搜索,以找到模型的最佳可能参数,然后查看具有最佳参数的模型的最重要特征。 我用过的包:

import nltk
from nltk.corpus import stopwords
import pandas as pd
import string
import re
import pickle
import os
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import KFold, cross_val_score
from sklearn.metrics import precision_recall_fscore_support as score
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV

经过一些数据清理和预处理后,我进行了这样的网格搜索,其中 x_features 是具有我数据的 tfidfvectorized 特征的 DataFrame:

param = 'n_estimators':[10, 50, 150], 'max_depth':[10, 30, 50, None], 'min_impurity_decrease':[0, 0.01, 0.05, 0.1], 'class_weight':["balanced", None]
gs = GridSearchCV(rf, param, cv=5, n_jobs=-1)
gs_fit = gs.fit(x_features, mydata['label'])
optimal_param = pd.DataFrame(gs_fit.cv_results_).sort_values('mean_test_score', ascending = False)[0:5]
optimal_param1 = gs_fit.best_params_

我的想法是,也许我可以让自己变得容易,并将最佳参数 1 复制到我的 RandomForestClassifier() 中,并或多或少地像这样将其拟合到我的训练数据中:

rf = RandomForestClassifier(optimal_param2)
rf_model= rf.fit(x_train, y_train)

但optimal_param2 是一个字典。因此,我认为将其转换为字符串并摆脱过多的符号( sub : for =, delete , delete )会使其工作。这显然失败了,因为 n_estimators、max_depth 等的数字仍然是字符串并且它需要整数。我最终想要实现的是获得最重要功能的输出,或多或少像这样:

top25_features = sorted(zip(rf_model.feature_importances_, x_train.columns),reverse=True)[0:25]

我意识到 gs 已经是一个完整的 RF 模型,但它没有我正在寻找的属性 feature_importances_。 我将非常感谢有关如何使其发挥作用的任何想法。

【问题讨论】:

【参考方案1】:

运行gs_fit=gs.fit(X,y) 后,您拥有所需的一切,无需进行任何重新培训。

首先,您可以通过以下方式访问最佳模型:

best_estimator = gs_fit.best_estimator_

这是返回产生最佳结果的随机森林。然后您可以通过以下方式访问该模型的特征重要性

best_features = best_estimator.feature_importances_

显然,您可以将这些链接并直接执行:

best_features = gs_fit.best_estimator_.feature_importances_

【讨论】:

以上是关于如何从 GridsearchCV 获取 feature_importances_的主要内容,如果未能解决你的问题,请参考以下文章

如何从 sklearn gridsearchcv 获取敏感性和特异性(真阳性率和真阴性率)?

从 GridSearchCV 获取特征重要性

如何在 python 中的 sklearn 中获取 GridSearchCV 中的选定功能

如何从 gridsearchcv 绘制决策树?

如何使用GridSearchCV获取所有模型(每组参数一个)?

如何在 Scikit-Learn 中获取 GridSearchCV() 的 OneVsRestClassifier(LinearSVC()) 的估算器键参考?