【发布时间】:2021-02-11 07:37:54
【问题描述】:
我使用very simple kaggle dataset 来了解带有逻辑回归的 SelectFromModel 的工作原理。这个想法是创建一个非常简单的管道,其中包含一些基本的数据处理(删除列 + 缩放),将其传递给特征选择(logreg),然后拟合 xgboost 模型(未包含在代码中)。通过阅读documentation,我的理解是,给定我的 X_train 和 y_train 拟合 logreg 模型,并选择系数高于或等于阈值的那些特征。就我而言,我将阈值设置为 mean*1.25。
我不明白为什么输出 selector.threshold_ 与我期望得到相同值的 selector.estimator_.coef_.mean()*1.25. 不同,为什么不是这样?
展望未来,我想做 GridSearchCV 来微调我的管道参数。我通常这样做:
from sklearn.model_selection import GridSearchCV
params = {}
params['gradientboostingclassifier__learning_rate'] = [0.05, 0.1, 0.2]
params['selectfrommodel__estimator__C'] = [0.1, 1, 10]
params['selectfrommodel__estimator__penalty']= ['l1', 'l2']
params['selectfrommodel__estimator__threshold']=['median', 'mean', '1.25*mean', '0.75*mean']
grid = GridSearchCV(pipe, params, cv=5, scoring='recall')
%time grid.fit(X_train, y_train);
不幸的是,阈值似乎不在参数列表中 (pipe.named_steps.selectfrommodel.estimator.get_params().keys()),因此要使 GridSearchCV 正常工作,需要对此行进行注释。
params['selectfrommodel__estimator__threshold']=['median', 'mean', '1.25*mean', '0.75*mean']
有没有办法微调阈值?
【问题讨论】:
标签: python machine-learning scikit-learn logistic-regression gridsearchcv