使用scikit-learn中的GridSearch确定要删除/选择的特征

如何使用GridSearch的结果来确定要删除哪些特征/列/属性?

换句话说,如果GridSearch返回max_features应为3,我们能否确定应该使用哪三个确切的特征?

让我们以经典的Iris数据集为例,它有4个特征。

import numpy as npfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.model_selection import StratifiedKFold from sklearn.model_selection import GridSearchCVfrom sklearn import datasetsiris = datasets.load_iris()all_inputs = iris.dataall_labels = iris.targetdecision_tree_classifier = DecisionTreeClassifier()parameter_grid = {'max_depth': [1, 2, 3, 4, 5],              'max_features': [1, 2, 3, 4]}cross_validation = StratifiedKFold(n_splits=10)grid_search = GridSearchCV(decision_tree_classifier,                       param_grid=parameter_grid,                       cv=cross_validation)grid_search.fit(all_inputs, all_labels)print('Best score: {}'.format(grid_search.best_score_))print('Best parameters: {}'.format(grid_search.best_params_))

假设我们得到max_features为3。我如何找出这里最合适的3个特征?

将max_features设置为3可以用于拟合,但我想要知道哪些属性是正确的。

我是否必须自己生成所有特征组合的可能列表来供GridSearch使用,还是有更简单的方法?


回答:

如果你使用了一个具有feature_importances_属性的估计器,你可以简单地这样做:

feature_importances = grid_search.best_estimator_.feature_importances_

这将返回一个列表(n_features),显示每个特征对于通过网格搜索找到的最佳估计器的重要性。此外,如果你想使用比如线性分类器(逻辑回归),它没有feature_importances_属性,你可以这样做:

# 获取最佳估计器的系数estimator_coeff = grid_search.best_estimator_.coef_# 将模型系数乘以数据的标准差coeff_magnitude = np.std(all_inputs, 0) * estimator_coeff)

这也是特征重要性的一个指示。如果一个模型的系数>> 0<< 0,那意味着,用通俗的话来说,模型正在努力捕捉该特征中存在的信号。

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注