如何使用GridSearch结果确定要删除的要素/列/属性?
换句话说,如果GridSearch返回max_features应该为3,我们是否可以确定应该使用哪个EXACT 3功能?
让我们采用具有4个功能的经典Iris数据集。
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import GridSearchCV
from sklearn import datasets
iris = datasets.load_iris()
all_inputs = iris.data
all_labels = iris.target
decision_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,还是有一种更简单的方法?
答案 0 :(得分:2)
max_features是决策树的一个超参数。 它不会在训练前删除您的任何功能,也不会发现好功能或坏功能。
您的决策树会查看所有功能,以找到最佳功能,以便根据标签拆分数据。如果在示例中将maxfeatures设置为3,则决策树仅查看三个随机特征,并采用其中的最佳特征进行拆分。这样可以使您的训练更快,并为分类器增加一些随机性(也可能有助于防止过度拟合)。
您的分类器通过标准(例如基尼系数或信息增益(1熵))确定哪个特征。因此,您可以对功能的重要性进行此类测量,也可以
使用属性为feature_importances _
的估算器
如@gorjan所述。
答案 1 :(得分:1)
如果您使用具有属性feature_importances_
的估算器,则只需执行以下操作:
feature_importances = grid_search.best_estimator_.feature_importances_
这将返回列表(n_features)
,其中列出了每个功能对于通过网格搜索找到的最佳估计量的重要性。此外,如果您要使用线性分类器(逻辑回归),则该分类器不具有属性feature_importances_
,您可以做的是:
# Get the best estimator's coefficients
estimator_coeff = grid_search.best_estimator_.coef_
# Multiply the model coefficients by the standard deviation of the data
coeff_magnitude = np.std(all_inputs, 0) * estimator_coeff)
这也表明功能的重要性。如果模型的系数为>> 0
或<< 0
,则以通俗易懂的术语表示,该模型正在努力捕获该特征中存在的信号。