如何解决包括Scaling和PCA作为GridSearchCV的参数
我想使用gridsearchcv
进行逻辑回归,但是我想对比使用Scaling和PCA时的性能,所以我不想在所有情况下都使用它。
我基本上想将PCA和Scaling作为gridsearchcv
的“参数”
我知道我可以建立这样的管道:
mnl = LogisticRegression(fit_intercept=True,multi_class="multinomial")
pipe = Pipeline([
('scale',StandardScaler()),('mnl',mnl)])
params_mnl = {'mnl__solver': ['newton-cg','lbfgs','liblinear','sag','saga'],'mnl__max_iter':[500,1000,2000,3000]}
问题是,在这种情况下,缩放将应用于所有折叠,对吗? 有没有办法使它“包含”在gridsearch中?
编辑:
我只是读了this answer,尽管它与我想要的相似,但事实并非如此,因为在这种情况下,Scaler将应用于GridSearch中的最佳估计器。
例如,我想做的是
params_mnl = {'mnl__solver': ['newton-cg','lbfgs']}
我想使用Scaler + newton-cg,无Scaler + newton-cg,Scaler + lbfgs,无Scaler + lbfgs进行回归。
解决方法
您可以将with_mean
的参数with_std
和StandardScaler()
设置为False,以表示没有标准化。在GirdSearchCV
中,参数para_grid
可以设置为
param_grid = [{'scale__with_mean': [False],'scale__with_std': [False],'mnl__solver': ['newton-cg','lbfgs','liblinear','sag','saga'],'mnl__max_iter':[500,1000,2000,3000]
},{'mnl__solver': ['newton-cg',3000]}
]
然后列表中的第一个字典为“ No Scaler + mnl”,第二个为“ Scaler + mnl”
参考:
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html
https://scikit-learn.org/stable/tutorial/statistical_inference/putting_together.html
编辑: 如果您还考虑打开/关闭PCA,我认为这很复杂。也许您需要定义一个派生自原始PCA的自定义PCA。然后定义其他布尔参数,该参数确定是否应执行PCA ...
class MYPCA(PCA):
def __init__(self,PCA_turn_on,*args):
super().__init__(*args)
self.PCA_turn_on = PCA_turn_on
def fit(X,y=None):
if (PCA_turn_on == True):
return super().fit(X,y=None)
else:
pass
# same for other methods defined in PCA
,
从the documentation到Pipeline
:
可以通过将参数的名称设置为另一个估算器来完全替换步骤的估算器,或者通过将其设置为“ passthrough”或
None
来删除变形器。
例如:
pipe = Pipeline([
('scale',StandardScaler()),('mnl',mnl)])
params = {
'scale': ['passthrough',StandardScaler()],3000]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。