使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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